Group Study (2022-2023)/Spring 심화 8

[Spring 심화] 8주차 스터디 - 8장 스프링이란 무엇인가?

8.1 스프링의 정의 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 애플리케이션 프레임워크란? 일반적인 라이브러리나 프레임워크, 특정 계층에서 동작하는 한 가지 기술 분야에 집중 ex1) 웹 계층을 MVC 구조로 손쉽게 만들 수 있게 함 ex2) 포맷과 출력장치 유연하게 변경가능한 애플리케이션 로그 기능 제공 ex3) 관계형 DB와 자바 obj 매핑해주는 ORM 기술 제공 등 애플리케이션 프레임 워크 특정 계층,기술, 업무 분야에 국한 X, 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크 애플리케이션 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 각 분야의 특성에 맞는 필요를 채워주기 때문에, 애플리케이션을 빠르고 효과적으로 개발할 수 있다. 스프링..

[Spring 심화] 7주차 스터디 - 6장 AOP (2)

6. AOP AOP는 핵심적인 기능에서 부가적인 기능을 분리해서 애스펙트라는 독특한 모듈로 만들어서 설계하고 개발하는 방법이다. 5. 스프링 AOP 1. 자동 프록시 생성 한 가지 해결해야할 과제는 ProxyFactoryBeam 빈 설정정보를 추가하는 부분이다. 문제가 되는 이유는? : 설정을 매번 복사해서 붙이는 작업이 반복되는 것! 빈 후처리기를 이용한 자동 프록시 생성기 빈 후처리기는 스프링 빈 오브젝트로 만들어지고 난 후에, 빈 오브젝트를 다시 가공할 수 있게 해준다. 스프링 컨테이너는 변하지 않는 핵심적인 부분외에는 대부분 확장할 수 있도록 확장 포인트를 제공하는데, 이를 활용해서 위의 문제를 해결해보자 빈 후처리기는 BeanPostProcessor 인터페이스를 구현해서 만들어진다. Defaul..

[Spring 심화] 6주차 스터디 - 6장 AOP (1)

📗 토비의 스프링 3.1 Vol.1 스프링의 이해와 원리 📝 6장 AOP AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나 AOP를 바르게 이용하려면 OOP를 대체하려고 하는 것처럼 보이는 AOP라는 이름 뒤에 감춰진, 그 필연적인 등장배경과 스프링이 그것을 도입한 이유, 그 적용을 통해 얻을 수 있는 장점이 무엇인지에 대한 충분한 이해 필요 스프링의 적용된 가장 인기 있는 AOP의 적용 대상 : 선언적 트랜잭션 기능 ✨ 6장에서 다루는 것 : 서비스 추상화를 통해 많은 근본적인 문제를 해결했던 트랜잭션 경계설정 기능을 AOP를 이용해 더욱 세련되고 깔끔한 방식으로 바꾸기, 그 과정에서 스프링이 AOP를 도입해야 했던 이유 6.1 트랜잭션 코드의 분리 지금까지의 UserServ..

[Spring 심화] 5주차 스터디 - 5장 서비스 추상화

📌 사용자 레벨 관리 기능 추가 구현해야 할 레벨 시스템 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나. 처음 가입한 사용자는 BASIC 레벨 가입 후 50회 이상 로그인시 SILVER 레벨 SILVER에서 30번 이상 추천을 받으면 GOLD 레벨 레벨의 변경 작업은 일정 주기마다 일괄적으로 진행 (그때그때 ❌) Level 클래스 추가 각 레벨을 어떻게 저장할 지 생각해보자. 정수형(int)으로 저장하는 방법 -> ⛔️ 범위를 벗어나는 값이 들어갈 수도 있음 Enum 이용 // Level.java public enum Level { BASIC(1), SILVER(2), GOLD(3); // 세개의 enum 객체를 정의한다. private final int value; Level(i..

[Spring 심화] 4주차 스터디 - 4장 예외

4.1 사라진 SQLException JdbcTemplate으로 바꾼 후 deleteAll() 메소드 : thorws SQLException 선언 사라짐 왜 SQLException이 사라졌을까? 초난감 예외처리 예외 블랙홀 : 예외를 처리하지 않고 넘어가는 경우 예외 무시하고 계속 진행 상황 : catch로 잡은 후 아무것도 하지 않고 넘어감 문제 : 예외가 발생했는데 무시하고 계속 진행 → 최종적 오작동시 발견 힘듬 try{ ... } catch(SQLException e){ } 예외 잡고 화면에 로그 띄우기 } catch(SQLException e){ System.out.println(e); } 상황 : 예외 발생시 화면에 출력해줌 문제 : 로그와 메세지 금방 묻힘, 예외가 처리되지 않음 콘솔, 로그..

[Spring 심화] 3주차 스터디 - 3장 템플릿

템플릿이란? 변동성 있는 코드들 사이, 일정 패턴으로 유지되는 부분만 독립시켜 활용하는 방법 📌 예외상황 처리가 가능한 UserDao 코드 예외 발생 여부와 관계없이 썼던 리소스를 반환해야 하므로 JDBC 코드에서 예외처리는 필수원칙 JDBC 수정/조회 기능의 예외처리 코드 수정의 deleteAll() 에서 사용하는 리소스는 Connection, PreparedStatement 처리중 예외로 인해 close()가 실행되지 않아 풀로 리소스를 반환하지 못하는 경우를 대비 ⇒ try/catch/finally 구문 getCount() 메소드의 경우 리소스를 Connection, PreparedStatement, ResultSet을 사용 ⚠️ 아래의 문제점 - 모든 메소드마다 복잡한 try, catch, fin..

[Spring 심화] 2주차 스터디 - 2장 테스트

테스트란? 테스트는 예상하고 의도했던 대로 코드가 정확히 동작하는지 확인해서, 만든 코드를 확신할 수 있게 해주는 작업으로 코드로 테스트가 수행되도록 하므로 자주 반복할 수 있고, 코드에 새로운 변경이 생겼을때 기존의 기능에 문제가 있는지 없는지 빨리 확인할 수 있다. 단위 테스트 작은 단위의 코드에 대해 테스트를 수행한것 작은 단위로 쪼개서 자신의 관심사에만 집중해서 테스트 ❓ 단위 테스트의 장점 각 작은 단위 별로 테스트하므로 오류의 원인을 찾기 쉽다. 확인의 대상과 조건이 간단할수록 좋다. JUnit 자바 테스팅 프레임워크, 자바를 단위 테스트로 만들때 유용하게 사용한다. 많은 테스트를 간단히 실행, 테스트 종합결과 확인, 테스트 실패한곳 빠르게 확인 등의 기능 제공한다. 메소드는 public으로 ..

[Spring 심화] 1주차 스터디 - 1장 오브젝트와 의존관계

스프링 자바(객체지향)을 기반으로 한 기술 오브젝트(사이클)이 중요하다 다형성 [객체 지향 특징] : 역할(interface)와 구현(객체)로 나누는 것. 단순, 유연, 변경이 편리해진다. 다형성을 통해 클라이언트는 대상의 역할(interface)만 알면 되고, 내부구조를 모르거나 변경되어도 영향을 받지 않는다. 객체 설계 시 역할(interface)먼저 부여 → 이후 역할(객체) 만들기 실행 시점에 인스턴스를 유연하게 변경할 수 있다. ⇒ 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다. ⇒ 제어의 역전(IoC), 의존 관계 주입(DI)는 다형성을 활용해 역할과 구현을 편하게 다룰 수 있도록 도와준다 좋은 객체 지향 설계의 5원칙 (SOLID) SRP : 단일 책임 원칙(sing..