이전 글에서는 가장 기본적인 프론트 컨트롤러의 구조에 대해서 알아보고 이를 구현해보았다. 사실 글을 쓰면서도 이렇게 까지 기본적인? 내용에 대해 글을 쓰고 코드로 구현을 해봐야 할까 싶었지만, 사실 스프링에서 구현된 프론트 컨트롤러 패턴은 매우매우 복잡해서 공부한 뒤 일주일만 지나도 이에 대해 확실하게 기억하기가 쉽지 않다. 그러나 아주 기본적이면서도 간단한 4개의 객체로만 구성된 구조를 파악하고 기억하는 것은 매우 쉬운데 이를 통해 오랫동안 스프링의 구조를 잘 기억할 수 있기를 바라며 글을 작성해 보았다. 또한 프레임워크를 한번도 공부해본 적이 없는 분들에게도 도움이 되지 않을까 한다. 각설하고 이번 글에서는 지난번에 구현했던 프론트 컨트롤러 패턴을 조금더 향상된 구조로 리팩토링하려고 한다. 지난 구조..
간단한 웹 프로그램을 한번이라도 개발해본 적이 있다면 웹 서버 또는 WAS에 대해 들어본 적이 있을 것이다. 이름도 비슷해서 혼동하기 쉬운데 이참에 둘의 개념을 확실히 이해해보자. 또한 스프링으로 개발된 프로그램이 서버에서 서비스될 때 어떤 프로세스로 요청이 처리되는지도 추가로 짚고 넘어가자. 웹 프로그램은 클라이언트의 HTTP 프로토콜에 기반한 요청에 대해 서버가 적절한 응답을 반환하는 식으로 동작한다. 즉 서버는 요청에 따른 리소스를 클라이언트에게 제공하는데, 이때 제공되는 리소스는 추가 처리 여부에 따라 정적 리소스, 동적 리소스로 구분될 수 있다. 먼저 정적 리소스는 별도의 서버에서의 처리 없이 단순히 조회되는 리소스로, 모든 사용자에게 동일하게 보여지며 예로는 HTML, CSS, JS, 이미지,..
service 계층에서 @Transactional(readOnly = true) 임에도 불구하고 insert 쿼리가 나가는 것을 보게 되었다. @Transactional(readOnly = true)의 정의대로라면 DB에 변경을 가하는 CUD 작업 즉 insert, update, delete는 불가능하다. 이번 글에서는 왜 readOnly 트랜잭션에서 insert 쿼리가 나갈 수 밖에 없었는지 알아보고자 한다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id..
김영한님의 스프링 강의를 들어오면서 CUD에는 @Transactional을 R에는 아무 어노테이션을 붙여오지 않았다. 이게 정석인 줄 알았는데 같이 프로젝트를 진행한 팀원이 service 계층의 모든 메소드에 해당 어노테이션을 붙이는 것을 보고 관련 내용들을 찾아보니 이 3개가 엄연히 말하면 모두 다른 것이었다. 이번 글에서는 @Transactional, @Transactional(readOnly = true), 트랜잭션 어노테이션 없음 간 동작방식의 차이에 대해서 자세히 알아보고자 한다. public class Service { @Transactional public void createOrUpdateOrDeleteSomething() {} @Transactional(readOnly = true) pu..
- Total
- Today
- Yesterday
- 단위 테스트
- github
- spring
- Transaction
- Spring Security
- mockito
- 디자인 패턴
- rest api
- C++
- Git
- SSE
- servlet filter
- JPA
- QueryDSL
- 서블릿 컨테이너
- junit5
- 모두의 리눅스
- Java
- ParameterizedTest
- spring boot
- 템플릿 콜백 패턴
- facade 패턴
- spring aop
- Gitflow
- Linux
- vscode
- 전략 패턴
- Assertions
- FrontController
- Front Controller
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |