전체 글 513

Redis와 직렬화

1. Redis의 데이터 저장 방식Redis는 메모리 기반의 Key-Value 저장소이며, 내부적으로는 Byte 배열(Binary 데이터) 형태로 데이터를 저장합니다.따라서 자바 객체, 파이썬 객체, JSON 같은 언어/프레임워크의 데이터 구조를 그대로 Redis에 넣을 수 없습니다.→ 이를 직렬화(Serialization) 해서 바이트 스트림으로 변환해야 합니다.---2. 직렬화가 필요한 이유1. 데이터 호환성애플리케이션 메모리에 존재하는 객체는 JVM이나 특정 언어 런타임 내부 구조에 종속적입니다.Redis는 언어에 상관없이 데이터를 저장해야 하므로 언어에 독립적인 형태(바이트 배열) 로 변환해야 저장·조회가 가능합니다.2. 데이터 전송 가능성Redis와 애플리케이션은 네트워크를 통해 통신합니다.네트..

톰캣에 대해서 설명해주세요.

Tomcat웹 서버와 웹 컨테이너의 결합한 형태입니다. 현재 가장 일반적이고 많이 사용되는 WAS입니다. 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고도 부릅니다. JSP와 서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등을 처리해줍니다.서블릿이 무엇인가요? 🤔서블릿은 자바를 이용해 웹 서비스를 만들기 위한 스펙입니다. 클라이언트가 프로그램으로 요청을 보내면 그 요청에 대한 결과를 응답해주기 위해서 사용됩니다. 서블릿은 다음과 같이 동작합니다.사용자가 URL을 입력하면 사용자의 요청이 서블릿 컨테이너로 전송됩니다.요청을 받은 컨테이너는 HttpServletRequest, HttpServletResponse를 생성합니다.서블릿 매..

마이바티스의 장단점

MyBatis가 좋은 이유1. SQL 제어권이 명확함복잡한 쿼리, 조인, 인덱스 활용, 성능 튜닝 등을 개발자가 직접 세밀하게 제어할 수 있음. Query 플랜 보고 힌트 주거나, 특정 DB 기능 활용하기 좋음. 2. 동적 SQL 지원이 유연함, , 같은 XML 기반 동적 SQL 요소가 있고, 파라미터 조합에 따라 SQL을 유연히 구성 가능. 3. 학습 진입 장벽이 낮은 편SQL을 이미 잘 아는 개발자라면 “쿼리 작성 + 매핑” 구조가 익숙하고, JDBC 쪽 복잡한 boilerplate를 줄여주는 만큼 빠르게 사용할 수 있음. 4. DB 종속적인 기능 활용 가능DB 벤더의 고유 기능(stored procedure, 함수, 힌트 등)을 쿼리에서 바로 쓸 수 있음. ORM보다 제약이 적음. 5. 명확한 매..

단순히 ORM을 ‘사용’한 경험이 아니라, ORM ↔ 트랜잭션의 동작 흐름을 이해하고 이를 바탕으로 성능 튜닝과 장애 포인트 식별/대응

단순히 ORM을 ‘사용’한 경험이 아니라, ORM ↔ 트랜잭션의 동작 흐름을 이해하고 이를 바탕으로 성능 튜닝과 장애 포인트 식별/대응까지 할 수 있는지를 검증한다.”핵심 평가 축1. 엔티티 라이프사이클 & 영속성 컨텍스트1차 캐시, 지연쓰기(write-behind), flush/clear 타이밍, dirty checking 이해2. 연관관계 매핑 & 로딩 전략LAZY/EAGER, fetch join, 그래프 엔트리 포인트, N+1 진단/해결 능력3. 트랜잭션 경계 & 격리/전파@Transactional 경계, readOnly, 격리수준(READ COMMITTED 등), 전파(PROPAGATION_REQUIRED/REQUIRES_NEW), 타임아웃4. 락킹 & 동시성 제어낙관적/비관적 락, 버전 필드, ..

RequestBody VS ModelAttribute의 차이점을 말해주세요.

이들은 클라이언트 측에서 보낸 데이터를 Java 객체로 만들어주는데 RequestBody 는 요청의 본문(Body)에 있는 값을 바인딩할 때 사용하고, ModelAttribute 는 요청 파라미터나 multipart/form-data 형식을 바인딩할 때 사용합니다.RequestBody클라이언트가 보내는 요청의 본문을 자바 객체로 변환합니다.내부적으로 HttpMessageConverter를 거치는데, 이때 ObjectMapper를 통해 JSON 값을 java 객체로 역직렬화합니다.따라서 변환될 java 객체에 기본 생성자를 정의해야 하고, getter나 setter를 선언해야 합니다. 참고cf. record에 기본 생성자를 따로 정의하지 않았는데 역직렬화가 되는 이유record 는 기본생성자를 자동으로 제..

“모놀리식 → 멀티모듈(여전히 한 프로세스)”생기는 문제들

1. 경계가 흐릿해짐모듈 간 순환 의존, 공용 util 남용, 도메인 객체를 그대로 넘기며 레이어 침식.Shared DB 테이블을 서로 직접 건드리며 트랜잭션 경계가 꼬임.2. 의존성/빌드 지옥transitive dependency 충돌, BOM 부재로 버전 드리프트.멀티모듈 빌드 캐시/평행 빌드 미설정으로 빌드 시간 폭증.리소스/Bean 이름 충돌(동일 이름의 application.yml, message, Bean name 등).3. Spring 특유의 함정광범위한 @ComponentScan 으로 모듈 경계 무시, “우연한” 빈 주입.@Configuration 들이 서로 @Import 하다 모듈 순환.테스트에서 @SpringBootTest 한 방으로 모두 로딩 → 테스트 느려지고 경계 검증 불가.4. ..

스택을 활용하여 브라우저의 뒤로가기/앞으로가기 기능을 구현하는 방법을 설명해주세요.

스택을 활용하면 브라우저의 뒤로가기/앞으로가기 기능을 효율적으로 구현할 수 있습니다. 이를 위해 다음과 같은 두 가지 스택이 필요합니다.backStack (뒤로가기 스택): 사용자가 방문한 페이지들이 차례대로 쌓이며, 가장 위에 있는(top) 페이지가 현재 페이지에 해당합니다. 이 스택은 뒤로가기 기능을 담당합니다.forwardStack (앞으로가기 스택): 뒤로가기를 한 뒤 다시 앞으로 이동할 수 있도록 이전에 방문했던 페이지들을 보관합니다.이 두 스택을 활용한 동작 흐름은 다음과 같습니다.1. 새로운 페이지 방문 시현재 페이지를 backStack에 push합니다.이전의 forward 경로는 더 이상 유효하지 않으므로 forwardStack은 초기화됩니다.2. 뒤로가기 버튼 클릭 시현재 페이지를 bac..

ControllerAdvice에 대해 설명해주세요

@ControllerAdvice는 모든 컨트롤러에 대해 전역 기능을 제공하는 애너테이션입니다. @ControllerAdvice가 선언된 클래스에 @ExceptionHandler, @InitBinder, @ModelAttribute를 등록하면 예외 처리, 바인딩 등을 한 곳에서 처리할 수 있어, 코드의 중복을 줄이고 유지보수성을 높일 수 있습니다. @ControllerAdvice는 내부에 @Component가 포함되어 있어 컴포넌트 스캔 과정에서 빈으로 등록됩니다. @RestControllerAdvice는 내부에 @ResponseBody를 포함하여 @ExceptionHandler와 함께 사용될 때 예외 응답을 Json 형태로 내려준다는 특징이 있습니다.

쿠키와 세션에 대해 설명해주세요.

쿠키와 세션은 클라이언트와 서버 간의 상태를 유지하기 위해 사용하는 대표적인 방식들입니다. 웹은 기본적으로 상태를 저장하지 않는 Stateless한 구조이기 때문에, 사용자의 로그인 정보나 장바구니와 같은 클라이언트 정보를 유지하려면 별도의 상태 관리 방식이 필요합니다. 이때 주로 활용되는 방식이 쿠키와 세션입니다.먼저, 쿠키는 클라이언트 측에 저장되는 데이터입니다. 서버가 클라이언트에게 응답할 때 Set-Cookie 헤더를 통해 데이터를 전달하고, 이후 클라이언트는 요청 시 해당 쿠키를 자동으로 포함하여 서버로 전송하게 됩니다. 쿠키는 브라우저에 저장되기 때문에 서버에서는 별도의 저장 공간을 차지하지 않으며, 지속적인 상태 유지가 가능합니다. 유효 기간을 설정하여 자동 만료되도록 할 수도 있습니다. 쿠..

@Controller 와 @RestController 의 차이점을 설명해주세요.

이 두 어노테이션의 주요 차이점은 HTTP 응답의 처리 방식에 있습니다.@Controller주로 뷰(View)를 반환하는 컨트롤러를 정의할 때 사용됩니다. 메서드가 반환하는 값은 뷰 리졸버(View Resolver)에 의해 해석되어 JSP, Thymeleaf 등과 같은 템플릿 엔진을 통해 HTML을 생성합니다.@RestController주로 RESTful 웹 서비스 API를 정의할 때 사용됩니다. 메서드가 반환하는 값은 자동으로 JSON 또는 XML 형식으로 변환되어 HTTP 응답 본문에 포함됩니다. 이는 @Controller와 @ResponseBody의 결합된 형태입니다.