이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 예외 계층과 체크, 언체크 예외 Object : 예외도 객체이다. 모든 객체의 최상위 부모는 Object이므로 예외의 최상위 부모도 Object이다. Throwable: 최상위 예외이다. 하위에 Exception과 Error가 있다. 이 예외를 잡으면 Error 까지 잡기 때문에 Exception 예외부터 잡는다. Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외이다. 개발자는 이 예외를 잡을 필요가 없다. Exception: 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. 이 예외를 상속받으면 체크 예외가 된다. Exception과 그..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 테스트 코드가 아래와 같이 작성되어 있다고 가정하자. @SpringBootTest class MemberServiceV3_3Test { @Autowired MemberRepositoryV3 memberRepository; @Autowired MemberServiceV3_3 memberService; @TestConfiguration static class TestConfig { @Bean DataSource dataSource() { return new DriverManagerDataSource(URL, USERNAME, PASSWORD); //직접 데이터 소스 등록 } @Bean PlatformTransact..
Mac에서 서버가 가동중인 상태로 프로젝트를 닫아버려서 Web server failed to start. Port 8080 was already in use. 오류가 발생하였다. 8080 포트가 이미 실행중인데 다시 이 포트를 사용하려고 하니 포트 충돌로 인한 오류로 보여진다. 해결 방법은 간단하다. 터미널을 열고 아래의 명령어를 입력한다. sudo lsof -i :8080 위 명령어를 입력하면 아래와 같은 메시지가 출력된다. PID라는 항목이 중요하다. PID 9894가 8080포트를 사용중인 것이다. 따라서 아래의 명령어로 8080포트를 사용중인 프로세스를 강제로 종료시킨다. kill -9 PID번호
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 트랜잭션 AOP(Aspect-Oriented Programming)는 스프링 프레임워크가 트랜잭션 관리를 위해 제공하는 선언적 트랜잭션 관리 방식이다. 이 방법을 통해 개발자는 비즈니스 로직과 트랜잭션 관리 코드를 분리할 수 있으며, 이로 인해 코드의 가독성과 유지보수성이 크게 향상된다. 스프링에서는 @Transactional 어노테이션을 사용하여 클래스나 메소드 레벨에서 트랜잭션을 선언적으로 관리할 수 있게 한다. 트랜잭션 AOP의 특징은 아래와 같다 @Transactional 어노테이션 사용: 개발자는 트랜잭션을 적용하고자 하는 메소드나 클래스에 @Transactional 어노테이션을 붙인다. 이 어노테이션..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 트랜잭션 템플릿(Transaction Template)은 스프링 프레임워크에서 제공하는 프로그래밍 방식(명시적)의 트랜잭션 관리 방법 중 하나이다. TransactionTemplate 클래스를 사용하면 선언적 트랜잭션 관리(@Transactional)와 달리, 코드 내에서 직접 트랜잭션의 시작, 커밋, 롤백을 제어할 수 있다. 이 방식은 트랜잭션 관리를 더 세밀하게 제어할 필요가 있는 복잡한 비즈니스 로직에서 유용하게 사용된다. TransactionTemplate 트랜잭션 템플릿을 적용하려면 템플릿을 제공하는 클래스를 작성해야 하는데, 스프링은 TransactionTemplate 라는 템플릿 클래스를 제공한다...
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 애플리케이션 아키텍처 프레젠테이션 계층, 서비스 계층, 데이터 접근 계층은 소프트웨어 설계에서 흔히 사용되는 3계층 아키텍처의 핵심 요소이다. 이 아키텍처는 애플리케이션을 구조화하고 관리하기 위해 계층을 분리함으로써, 유지보수성, 확장성 및 재사용성을 향상시킨다. 프레젠테이션 계층 프레젠테이션 계층은 사용자 인터페이스와 관련된 부분이다. 이 계층은 사용자의 입력을 받아들이고, 사용자에게 데이터를 시각적으로 표현한다. 웹 애플리케이션에서는 HTML, CSS, JavaScript 등을 사용하여 구현되며, 사용자의 요청을 서비스 계층으로 전달하고 결과를 사용자에게 돌려준다. 프레젠테이션 계층에서 서블릿과 HTTP 같..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 커넥션 풀 개념 커넥션 풀(Connection Pool)은 데이터베이스와의 연결을 재사용할 수 있도록 관리하는 일련의 데이터베이스 연결 집합이다. 애플리케이션의 성능을 향상시키기 위해 사용되며, 여러 사용자나 클라이언트 요청에 대응하여 데이터베이스 연결을 빠르게 제공하는 역할을 한다. 커넥션 풀을 사용하는 주된 이유는 연결 생성과 해제에 드는 비용이 높기 때문이다. 데이터베이스에 연결을 요청할 때, 커넥션 풀에서 미리 생성해 둔 연결 중 하나를 할당받는다. 사용이 끝난 연결은 다시 커넥션 풀로 반환되어, 다음 요청이 있을 때 재사용된다. 이 방식은 데이터베이스 연결을 매번 새로 생성하고 해제하는 것보다 훨씬 효..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. POST, Redirect GET 예를 들어, 상품 등록 폼에서 상품을 저장하고, 상품 상세 페이지로 간다고 가정하면, 아래와 같은 그림이 된다. @GetMapping("/add") //get public String addForm() { return "basic/addForm"; } @PostMapping("/add") //post public String addItem(@ModelAttribute Item item) { itemRepository.save(item); return "basic/item"; } 상품 등록 폼으로 갈때는 GET 요청으로 가고, 상품 저장을 저장하기 위해서는 POST 요청을 해야한..