본문 바로가기

Spring/웹

(9)
CRUDRepository vs JPARepository 도대체 무슨 차이지? API 문서를 살펴보면 각 repository에는 다음과 같은 Methods들이 포함되어있다. 보는 것과 같이 CRUD repo.에는 기본 CRUD에 관한 메서드를 정의하지 않고, 자동으로 사용할 수 있는 method들이 선언되어있다. (단, ID를 통한 CRUD이므로, 다른 field를 이용하고 싶으면, 따로 선언해야 한다.) JPA repo.의 경우 Batch 혹은 Paging과 같은 추가적인 기능을 제공해준다. 실제로, 많은 블로그 글들을 보게 되면, JPA repo.가 CRUD repo.의 손자뻘?이 되는 인터페이스라고 한다. 공식 문서 또한, 이와 같이 JPA repo가 CRUD, PagingAndSorting 등의 인터페이스를 상속받고 있음을 말하고 있다.
Servlet (서블릿이란? 그리고, Dispatcher Servlet이란 ? ) 🎨 What is Servlet? - JAVA를 사용하여 웹을 만들기 위해 필요한 프로그래밍 기술입니다. (Servlet 클래스의 구현 규칙을 지켜야합니다.) - 또한, 이러한 웹 기반의 요청에 대해 동적으로 처리해주는 역할로서 Server Side에서 작동(WAS)합니다. - 웹 페이지 개발 시, 웹 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현하여 조화롭게 사용합니다. - 클라이언트가 요청을 하면 그 결과를 다시 전송해주는 프로그램입니다. - HttpServlet이라는 Java의 클래스를 상속받습니다. 🎨 Servlet Life Cycle 1. Servlet 객체 생성 (1회) 2. init() 호출 (1회) 3. service(), doGet(), doPost() 호출 (..
Spring Container & Bean 생명주기 🎨 스프링 Container Life Cycle 생성 -> 설정(초기화) -> 사용 -> 종료 의 과정을 거칩니다. // 생성 GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); // 설정 ctx.load("classpath:applicationContext.xml"); ctx.refresh(); // 사용 Blog blog = ctx.getBean("blog", Blog.class); System.out.println("블로그 주인 :" + blog.getUserName()); System.out.println("블로그 이름 :" + blog.getBlogName()); // 종료 ctx.close(); 🎨 스프링 Bean Li..
Container란? (Servlet / Spring Container) 컨테이너란? Servlet, Java등의 객체를 담고 객체의 생성 및 소멸과 같은 라이프 사이클을 관리하는 것 Servlet Container (ex : Tomcat) servlet의 LifeCycle을 관리하는 컨테이너이며, 새로운 요청이 들어올 때마다 새로운 자바 스레드를 만들어줍니다. 즉, 개발자가 웹서버와 통신하기 위해 (소켓을 생성하고, 특정 포트에 리스닝하고, 스트림을 생성하는 등) 복잡한 일들을 할 필요가 없게 만들어줍니다. Servlet Container안에는 http 프로토콜을 통해 들어오는 모든 요청을 처리하는 Disaptcher Servlet도 존재합니다. 관련 포스트는 추후에 작성하여 링크를 걸도록 하겠습니다. Disaptcher Servlet 참고용 링크 : galid1.tisto..
Lombok의 좋은 사용법 1. @Data 지양하기 @ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor @Data는 위와 같은 모든 어노테이션을 따로 선언해줄 필요없습니다. 왜냐하면, @Data안에 이 모든 어노테이션이 포함되어있기 때문이죠! 그런데, 이 간편한 @Data를 사용하는 것을 왜 지양해야 할까요? 이에 대한 여러가지 이유가 있습니다. 첫 번째, @Setter는 안전하지 못합니다 Setter를 사용하게 된다면 객체를 언제든 수정할 수 있기 때문에 객체의 안전성이 보장받기 힘듭니다. 만약, '사용자의 실명'이 변경되지않아야 하는 웹이라면, 아예 그 기능을 제공하지 않는 것이 안전합니다. 그러나, @Setter를 사용하게 된다면, 이 기능을 원천적으로..
AOP란? (Spring AOP) AOP= 'Aspect Oriented Programming' (=관점 지향 프로그래밍) 핵심 비지니스 로직과 공통 모듈을 분리하는 것 AOP는 OOP를 대신하는 새로운 개념이 아니라, OOP를 더욱 OOP답게 사용할 수 있도록 도와주는 보조자이다. 다음과 같이 로그나 권한체크, 보안, 트랜잭션 등 핵심 비지니스 로직은 아니지만 반드시 해야되는 작업은 반복되야 하는데, 이러한 문제를 해결해주는 것이 AOP 이다. 관련 용어 - Target : 부가기능을 부여할 대상, 핵심 기능을 담당하는 Service - Aspect : 부가기능 모듈 : Advice + PointCut가 포함 - Advice : 실질적으로 부가될 기능을 정의되어있는 구현체 다시 말하면 Advice는 Aspect가 무엇을 언제할지를 정의..
Spring Security Spring Security란? Spring 기반의 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크 Spring 기반 애플리케이션의 보안에서는 사실상의 표준 보안의 3요소 1. 접근 주체(Principal) : 보호된 대상에 접근하는 사용자 2. 인증(Authenticate) : 현재 사용자가 누군인지 확인하는 과정, 일반적으로 아이디/암호를 이용해 인증 처리 3. 인가(Authorize) : 현재 사용자가 특정 URL, 기능 등의 접근 권한 여부 검사 1) 인증과 인가 Spring Security는 크게 인증 -> 인가 절차로 진행한다. 이러한 인증과 인가를 위해 Principal _(보호된 대상에 접근하는 사용자)_을 ID로, Credential _(대상에 접근하는 사용자의 비밀번호)_을 비밀번..
Web Server vs Web Application Server 포트폴리오를 작성하면서 Web Server와 Web Application Server (일명 : WAS) 에 대해 완벽히 이해하지 못한 것 같아 작성하는 포스트이다. 프로젝트 진행 시, Web Server는 Apache, Nginx를 사용했으며 WAS는 Tomcat을 사용하였다. (2021-04-05 추가 : Tomcat은 WAS라기 보단 Servlet Container에 가깝다고 한다. 왜냐하면, EJB와 같은 기능을 제공하지 않기 때문이다.) (2021-04-05 추가2: WAS는 사실, Web Server + Web Container(=Servlet Container) 이다.) 《 EJB : Enterprise JavaBeans, 자바로 서버 측 비지니스 로직을 작성하기 위한 서버측 컴포넌트 모델 ..