본문 바로가기

분류 전체보기90

톰캣의 구조와 Connector 설정 값 Tomcat의 구조 Server: tomcat의 최상위 인터페이스로 전체 컨테이너를 표현한다. Service: Server 안에 존재하며 Connector와 Engine을 연결해준다. Engine: 실제 요청을 처리하는 역할을 담당한다. Connector를 통해 요청을 받아 이를 처리한 후 응답을 보낸다. Host: 네트워크 이름을 나타낸다. Connector: 클라이언트와의 커뮤니케이션을 담당한다(이름 그대로 Connection을 처리한다). Context: Web application을 표현한다. 톰캣 튜닝을 할 때 우리가 주로 살펴볼 곳은 Connector이다. Connector의 주요 역할은 브라우저로부터 TCP 커넥션을 받아 Request, Response 객체를 생성하여 쓰레드가 이를 처리할 .. 2022. 9. 11.
deleteAllByIdInBatch는 영속성 컨텍스트를 동기화하지 않는다 (feat.문서를 잘 읽자…) delete 관련 기능을 개발하다가 trouble shooting(?)한 경험을 간단히 공유합니다. JpaRepository의 deleteAllByIdInBatch 메서드를 사용하는 서비스 코드를 테스트하는 과정에서, 분명 delete 쿼리가 로그에 찍히는데 findById로 조회를 하면 데이터가 남아있는 문제가 있었습니다. 이해하기 쉽게 예시를 다시 구성해보면 @Test void Space삭제() { Host host = hostRepository.save(Host_생성("1234")); Space space = spaceRepository.save(Space_생성(host, "잠실 캠퍼스")); Job job1 = jobRepository.save(Job_생성(space, "청소")); Job job.. 2022. 7. 18.
Singleton Scope 빈에 Request Scope 빈을 주입받고 싶다면… (Scoped Proxy Bean) 문제 상황 프로젝트 도중 singleton scope 빈에 request scope을 주입해서 사용해야 할 상황이 생겼다. 아래와 같이 인가 처리를 위한 커스텀 인터셉터에서 인증 정보를 담아두는 객체를 주입받아 사용해야 했기 때문이다. @Component public class AuthenticationInterceptor implements HandlerInterceptor { private final AuthenticationContext authenticationContext; ... @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Excep.. 2022. 7. 13.
[MySQL 8.0] 인덱스 조회 최적화 기능, Skip Scan에 대해 살펴보자 Real MySQL을 읽다가 재미있는 내용을 발견해서 한 번 정리해봤습니다. 인덱스의 핵심은 값이 정렬되어 있다는 것입니다. 다중 컬럼 인덱스는 첫 번째 칼럼에 의존하여 두 번째 칼럼이 정렬되기 때문에 칼럼의 순서가 매우 중요합니다. 예를 들어 mysql> ALTER TABLE employees ADD INDEX ix_gender_birthdate (gender, birth_date); 위와 같은 다중 컬럼 인덱스가 생성되어 있다면 birth_date 칼럼은 gender에 의존적입니다. 따라서 birth_date만을 조건으로 조회를 할 경우 인덱스를 활용하지 못합니다. 그런데 MySQL 8.0부터 skip scan 최적화 기능이 도입되면서, birth_date 조건만으로 인덱스를 활용할 수 있게 되었습니.. 2022. 6. 23.
3개월 간의 운동 후기 (03.16 ~ 06.18) 3월부터 집 주변 헬스장에서 운동을 하기 시작했다. 운동을 시작한 이유는 우아한테크코스 level 1 글쓰기 미션의 주제이기도 했다. 온라인으로 코스가 진행되면서 생활 패턴이 많이 무너졌었다. 매일 새벽 4시가 넘어서 잠들고, 데일리 미팅 시작 직전에 일어나는 생활을 반복했었다. 그러다 결국 늦잠 때문에 데일리 미팅에 지각을 했었다. 생활 패턴도 바꾸고 건강도 되찾고자 우테코 크루이자 동네 주민인 토르가 다니는 헬스장에 등록했다. 3개월 간의 성과를 먼저 말하자면, 근손실 없이 체지방만 4kg 걷어냈다. 체중: 86.2kg -> 82.6kg 골격근량: 35.6kg -> 35.8kg 체지방량: 24.1kg -> 20.1kg 운동을 시작하고 2주 정도 지나고 나서야 체성분 측정을 해서 조금 아쉽다. 운동을 .. 2022. 6. 18.
AUTO_INCREMENT는 ROLLBACK되지 않는다 데이터 접근 객체 테스트 작성 중 다음과 같은 문제를 겪었습니다. @SpringBootTest @Transactional @ActiveProfiles("test") class ChessGameDAOTest { @Autowired private ChessGameDAO dao; ... @Test @DisplayName("체스 게임방을 ID로 불러온다") void findChessGameById() { // arrange String gameName = "test1"; dao.addGame(new GameCreationDTO(gameName, "123")); // act ChessGame findGame = dao.findGameById(1); // assert assertThat(findGame.getNam.. 2022. 4. 27.