
Q1. Spring에서 트랜잭션 관리를 어떻게 할 수 있는지 설명하고, @Transactional의 동작 원리를 설명해주세요.더보기📌 Spring의 트랜잭션 관리 방식스프링은 트랜잭션을 처리할 때 선언적 트랜잭션 관리(Declarative Transaction Management) 방식을 제공하며, 이를 @Transactional을 통해 쉽게 적용할 수 있음.@Servicepublic class OrderService { @Transactional public void placeOrder() { // 1. 트랜잭션 시작 // 2. 주문 생성 로직 수행 // 3. 결제 로직 수행 // 4. 재고 감소 로직 수행 // 5. 트랜잭션 ..

Q1. Spring Framework의 핵심 개념인 IoC(Inversion of Control)와 DI(Dependency Injection)의 차이를 설명해보세요.더보기IoC (Inversion of Control, 제어의 역전)기존에는 개발자가 객체를 생성하고 생명주기를 관리했지만, IoC 컨테이너가 이 역할을 대신 수행개발자는 객체의 생성·소멸을 직접 제어하지 않고, 필요할 때 컨테이너가 제공해 줌이를 통해 객체 간의 결합도를 낮추고 유지보수성을 높일 수 있음✅ DI (Dependency Injection, 의존성 주입)IoC의 구현 방식 중 하나기존에는 new 키워드를 사용해 직접 객체를 생성했지만, DI를 사용하면 외부에서 객체를 주입받음DI 방식:생성자 주입Setter 주입필드 주입 (@Au..
스프링 컨테이너스프링 컨테이너는 애플리케이션의 객체(Bean)를 생성하고 관리하는 핵심 역할을 수행합니다. 이를 통해 의존성 주입(Dependency Injection), 빈 생명주기 관리 등을 자동화하여 개발자의 부담을 줄이고 효율적인 애플리케이션 개발을 가능하게 합니다. 1️⃣ 스프링 컨테이너의 역할1. 빈(Bean) 생성스프링 컨테이너는 특정 애너테이션이 붙은 클래스를 자동으로 스캔하여 빈으로 등록합니다.@Component, @Service, @Repository, @Controller 등의 애너테이션이 붙은 클래스를 스캔하여 자동으로 빈을 생성@Bean을 사용하여 명시적으로 빈을 등록할 수도 있음@Component vs @Bean스프링은 내부적으로 BeanDefinition이라는 메타데이터를 사용..

5월 중순에 자격증 시험을 응시했는데, 시험 결과가 나와 후기를 작성해보려 합니다. SQLDSQLD는 한국데이터산업진흥원에서 주최하는 시험을 통해 획득할 수 있는 자격증입니다. 학부 3학년 데이터베이스 강의를 수강했기도 하고 교수님께서도 자격증 시험 보는 것을 추천하셨던 기억이 있어 응시했습니다.시험 준비는 SQLD 준비하시는 분들에게는 유명한 노랭이 책을 통해 준비했습니다. SQLD 출제 내용은 데이터 모델링의 이해 과목과 SQL 기본 및 활용 과목으로 구성됩니다. 앞 과목에서는 데이터베이스 이론을, 이후 과목에서는 SQL 관련된 문제가 출제됩니다. SQL은 기본적으로 다룰 수 있기 때문에 크게 고려하지 않고 이론적인 부분을 공부하려고 했습니다.전공자라면 학부 시절 학습한 내용이 주로 출제되기 때문에..

AWS 프리티어AWS 프리티어란 AWS에서 계정 생성일로부터 12개월 동안 여러 서비스를 무료로 사용할 수 있도록 제공해주는 일종의 맛보기 서비스라고 할 수 있습니다. 주요 서비스는 AWS EC2, AWS S3, AWS RDS 가 있습니다. 자세한 내용은 우측 링크를 통해 확인하실 수 있습니다. AWS 프리티어 무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어이러한 프리 티어 혜택은 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과할 경우aws.amazon.com 무료라고 했잖아요..프로젝트를 위해 AWS 프리티어를 사용하던 중 비용 발생 이메일이 와서 청구서를 확인해보니 실제로 과금이 되었..

산학 협력 캡스톤 프로젝트를 진행하던 중 다음과 같은 오류가 발생했습니다. org.hibernate.NonUniqueResultException: Query did not return a unique result: 3 results were returned 쿼리를 통해 find 하는 메서드에서 발생한 오류인데 처음 보는 종류의 오류라 확인해보았습니다.해당 오류를 발생시키는 메서드는 아래의 메서드입니다. 해당 프로젝트는 SolveHistory와 SolveHistoryDetail 엔티티가 존재하는데, 1:N 관계를 가지고 있습니다.메서드는 SolveHistoryDetailRepository에 포함되는 메서드인데, 해당 메서드를 통해 받을 수 있는 클래스가 하나이기 때문에 발생하는 오류라고 합니다. 해당 문제..

프로젝트를 순탄하게 진행했을 때, 프론트에서 요청이 왔습니다. 😱: 올바른 요청을 했는데 500 에러가 발생해요!! 로그인 파트에서 발생한 에러인데, 문제는 커스텀 에러를 반환하지 않았던 것입니다. 백엔드에서는 도메인, 에러 종류별로 커스텀 에러 코드를 반환하도록 하는데 이 경우에는 500을 반환하여 이유를 알 수 없었습니다. (스웨거에서는 너무 잘 작동하고...) 보통 로컬에서 개발할 때, 이런 상황이 발생하면 콘솔에 찍거나 디버그를 돌리는 것이 가장 쉬운 방법이지만, 서버 배포된 상황에서 발생하는 에러는 할 수 없으니 로그를 까보기로 했습니다! 저희 프로젝트의 시스템 아키텍처는 위와 같습니다. 따라서 도커 로그를 확인하게 되었습니다. 방법은 다음과 같습니다. 1. docker ps를 통해 CONTAI..

지난 HTTP 완벽 가이드 스터디에 이어 오브젝트 스터디를 마쳤습니다. 이번 포스팅에서는 오브젝트를 읽으며 배운 점과 느꼈던 부분을 회고로 풀어보겠습니다. 오브젝트 선정 이유 객체지향 원리와 이론들이 일상에서 내가 작성하는 코드와 어떤 관련이 있는지 의문을 가졌다면 이 책을 통해 많은 해답을 찾을 수 있을 것이다. - 이일민님 - 책을 오브젝트로 선정하며 달성하기로 했던 목표는 "객체지향에 대한 부족함을 채우기" 이였습니다. 객체지향 프로그래밍 언어인 자바를 사용하고, 자바를 더욱 객체지향스럽게 사용할 수 있는 스프링 프레임워크를 사용하며 중간중간 겪는 어려움과 에러는 객체지향의 개념을 이해하지 못했기 때문이라고 생각합니다. 정확하게는, 개념을 알지 못하는 것이 아닌 개념과 설계에 있어서의 갭을 이겨내지..