@Entity @Entity가 클래스단에 붙은 클래스는 JPA가 관리하는 Entity라고 지정할 수 있다. JPA에서는 entity를 리플렉션으로 관리하기 때문에 항상 기본 생성자가 필수이다. 접근 제어자의 경우 public과 protected까지만 허용되며 보통은 protected를 많이 쓰는 추세이다. final 클래스, enum 클래스, interface, inner 클래스 모두에 사용이 불가능 하며 필드에는 final 상수로 지정하면 안된다. property name JPA에서 사용할 entity의 이름을 지정할 수 있다. default: class name 가급적 default값을 사용하도록 하자. 동일한 네이밍의 entity 클래스를 사용할 경우에만 건드는 것을 추천. @Table entity..

JPA에서 가장 중요한 두가지 객체와 RDB 매핑하기 영속성 컨텍스트 영속성 컨텍스트 엔티티를 영구 저장하는 환경 엔티티의 생명주기 비영속 (new / transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) 삭제된 상태 1. 비영속 Member member = new Member(); member.setId(1L); member.setName("hello"); 즉, 객체만을 만들어두고 다른 행위를 하지 않은 상태이다. 2. 영속 EntityManager em = emf.createEntityManager(); em.getTransaction()...

우리가 만드는 대부분의 어플리케이션은 객체 지향적인 언어를 사용한다. (Java, Scala ...) 하지만 데이터베이스에서는 아직은 RDB가 시장 대부분을 차지하고 있다. (Mysql, Oracle ...) 그래서 어떻게보면 객체를 RDB에 저장하여야하고 RDB에서 데이터를 꺼내서 객체에 매핑해서 사용해야한다. 즉, SQL 중심적인 개발을 진행해야한다. 누구나 한번쯤 느낄 수 있다. CRUD가 반복되는 무한반복 지루한 코딩 자바 객체를 SQL로, SQL를 자바객체로 변환하는 무수히 반복되는 코딩으로 인해서 SQL개발자인지 JAVA 개발자인지 분간이 되지 않는 상황이 오게 된다. 그 과정에서 겪을 수 있는 예를 보자. 객체 CRUD - 필드 추가 회원을 설계하고 회원을 저장하는 개발을 했다고 치자. pu..

SQL Injection? SQL을 사용하다보면 SQL Injection에 주의해서 Parameter Binding을 해라 라는 말이 자주 보인다. 과연 SQL Injection이 어떤 공격이며 Parameter Binding을 어떻게 해서 그 공격을 어떻게 막는 것일까? SQL Injection, 직역하면 SQL 삽입이다. 클라이언트에서 입력값을 조작함으로써 서버의 데이터베이스를 공격하는 방법으로 사용자가 입력한 데이터를 필터링없이 그대로 받아들였을 때 발생한는 공격이다. 최근에는 너무 잘 알려진 취약점 공격이고 서버에서도 SQL Injection에 대해서 방어가 되어있다. 그럼 이 공격이 어떻게 들어오는지 먼저 알아보도록 하자 SQL Injection 공격 다음과 같은 로그인 폼이 있다고 하자. 단순..

개발환경 프로젝트 생성 : https://start.spring.io/ GitHub Repository : https://github.com/jinyoungchoi95/learn_servlet Gradle 6.8.3 Java 11 Spring Boot 2.4.5 Packaging : Jar Dependency : Spring web, Lombok, Thymeleaf Jar를 통해 내장 톰캣을 사용하며 이전에 썼던 webapp경로도 사용하지 않게 된다. JSP를 이제 사용하지 않을 것이기 때문에 Jar 방식으로 진행을 이어간다. 스프링 부트 Jar 에서의 Welcome Page 스프링 부트에서 Jar를 사용한다면 /resource/static/index.html 파일은 항상 Welcome 페이지로 처리한다..

스프링 MVC 전체 구조 이전에 포스팅에서 Front Controller를 중심으로 Servlet Controller를 개편했었다. 그럼 이 개선한 MVC 프레임워크와 실제 Spring MVC는 얼마나 차이가 날까 개선한 MVC 프레임워크 Spring MVC 네임만 조금 다를 뿐 거의 똑같은 구조를 가지고 있다. 즉, Spring MVC도 마찬가지로 Dispatcher Servlet을 Front로 두고 컨트롤러들을 어댑터를 통해 관리한다. Servlet Container에서 HTTP 요청을 Servlet 제일 앞에 두고 중앙집중형으로 요청을 처리해주는 FrontController 결국 Dispatcher Servlet이 우리가 개발한 FrontController의 역할과 동일한 역할을 하는 Control..

프론트 컨트롤러 패턴 개요 앞전에 우리는 MVC 패턴을 Servlet과 JSP를 이용하여 만들면서 몇가지 아쉬운점이 있다는 것을 발견했다. 어떤 동작을 하는 컨트롤러를 생성할 때마다 String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); 와 같이 반복된 구문을 사용했고, 이러한 부분들이 많아질 수록 컨트롤러에서 공통으로 처리해야할 부분들이 늘어나 차후 유지보수단계에서 불편하게 될 것임을 예상했다. 따라서 도입이 된 것이 프론트 컨트롤러이다. 이전에는 클라이언트가 제각각 자기가 호..

Collection 인터페이스 지금 구현하던 Collections 프레임워크들은 Collection 인터페이스 내에 상속되어 구현된 클래스들이다. 처음에는 구현 자체에만 목적을 가지고 ArrayList, LinkedList 등을 만들었지만 구현 양이 늘어남에 따라 서로 같은 기능을 가진 메소드들이 반복적으로 나타났다. 따라서 더 구현하기 전에 Collection 인터페이스를 정의하고 메소드들의 기능에 대해서 정리하기로 하였다. 먼저 각 클래스들이 공통으로 가지는 메소드들을 확인해보자. size() isEmpty() contains() toArray() add() remove() clear() 가 있다. 따라서 Collection 인터페이스를 만들어서 정의해보자. package DataStructure; ..
- Total
- Today
- Yesterday