본문 바로가기

백엔드 잡학사전

(18)
[스프링 핵심] OOP 관점에서 코드 관찰하기, 스프링으로 전환하기 일단 정률 할인을 넣어준다. 그리고 테스트를 해준다. 만약 이렇게 잘 설계가 안된 코드라면 테스트를 하기도 매우 어려웠을 것이다. 그런데 우리 코드는 잘 되어 있기 때문에 좋은 것이다. 새로운 할인정책을 넣으려면, OrderServiceImpl로 들어가서 또 생성자를 건드려줘야 하는데,기존에 FixDiscountPolicy를 RateDiscountPolicy로 교체해줘야 한다... 지금까지 잘하고 있는지 확인해보자. OrderService가 DiscountPolicy의 인터페이스에만 의존하기로 되어있었는데, 그의 구현체 클래스에도 의존을 하고 있기 때문에 OCP를 위배하고 있다는 것이다. 그러니까 구현체를 다루는 부분의 코드를 아예 클라이언트 단의 코드에서 제거해야 한다. 어떻게? 관심사의 분리조승우가 ..
[스프링 핵심] 비즈니스 요구사항 맞춰 설계 및 순수 JAVA로 구현 spring initilizr로 일단 뼈대만 설정해둔다. 순수 JAVA로 먼저 짜보고, SPRING으로 다시 한번 짜면서 SPRING을 왜 쓰는지를 알려주신다고 하니 잘 들어보자. 비즈니스 요구사항과 설계 회원 도메인 설계클라이언트가 있고, 그들이 사용할 기능은 회원 서비스 즉, 회원가입과 회원조회가 있다. 그리고 거기에 곧장 DB와 같은 것들을 붙일 수도 있겠지만, 그게 아니라 회원 저장소라는 인터페이스를 따로 만들어주고, 저장소에 대한 구현을 메모리 회원 저장소, DB 회원 저장소, 외부 시스템 연동 회원 저장소로 나누어 구현한다고 한다 - 왜냐하면 미확정이라고 했기 때문에.여기서 핵심은, "회원 저장소"라는 회원을 저장하는 공간을 마련해두면 메모리 회원 저장소로 지금은 두더라도 DB 회원 저장소와 ..
[스프링 핵심] 스프링과 객체 지향 프로그래밍 IoC,DI,객체 지향 프로그래밍 SOLID,다형성 polymorphism,컨테이너,SRP,OCP/ DIP,,,, 이런 개념들을 모두 다뤄볼 예정이다. 스프링의 핵심가치는, "객체 지향 프로그래밍"이다옛날에는 EJB라는 기술이 있었다. 이게 표준이었다.그런데 이게, 제공하는 기능은 많은데 한 번 쓰기가 너무 복잡하고 느리고 힘들었다. 소위 "EJB 지옥".EJB에 지친 우리 선배 개발자들은 하나 둘 반기를 들기 시작했고, 차라리 기능이 적더라도 쓰기 간편하고 빠른 걸 만들고 싶다는 열망이 뻗치기 시작했다. 이 흐름의 가장 선봉장은 두명이 있었는데, 그게 오픈소스로 만들어졌고, 결국 각각 Spring과 Hibernate로 발전했다. 이후 JPA가 만들어졌다. 특이하게도 인터페이스 -> 구현체가 아니라, 구..
[스프링 입문] 스프링에서의 AOP AOP란?Aspect-Oriented Programming은 소프트웨어 개발의 한 패러다임으로, 앱의 공통 관심사(Cross-Cutting Concerns)를 모듈화하는 데에 중점을 둔다.  AOP의 기본개념?공통 관심사 Cross-cutting concerns: 앱의 여러 부분에서 공통적으로 필요한 기능을 말함. 예를 들어 로깅, 트랜잭션 관리, 보안, 예외처리 등. 이러한 기능들은 앱의 핵심 비즈니스 로직이 아니지만, 많은 클래스 혹은 메서드에서 필요로하는 기능이다.관점 Aspect: 공통 관심사를 모듈화한 단위를 aspect라고 함.그 외에도 위빙, 조인 포인트, 포인트컷, 어드바이스 등의 개념들이 있다. AOP가 필요한 상황?* 모든 메소드의 호출 시간을 측정하고 싶을 때, 모든 메소드의 앞뒤로 ..
[스프링 입문] 스프링에서의 DB 접근 기술 순서는,H2라는 가벼운 DB 설치 및 접근 => 순수 JDBC => 스프링 JPA 이렇게 진행이 될 예정이다. 내 컴퓨터에는 H2 설치가 에러가 뜨면서 계속 안 돼서 직접 해보지는 않고 간접 체험했다. H2 데이터베이스설치 후 깔끔한 GUI가 보임.일반적인 쿼리문을 통해서 DB에 들어가는 데이터를 만들어줌. 매우 직관적이고 쉬움.JAVA에서 Long을 쓴다면 SQL에서는 bigint를 사용함. * 이건 근데 cmd로 DB서버를 띄워둬야 한다. 그걸 끄면 작동 안 됨. 이제 이걸 앱과 연동시켜보자. 메모리가 아닌 DB에 데이터가 저장되게끔 해보자! 순수 JDBC 그리고 템플릿 사용지금 실무를 하는 데는 몰라도 지장없지만, 예전에는 어떻게 진행했는지를 알아보는 시간.,,,알아보기는 했는데 적기는 너무 귀찮으..
[스프링 입문] 스프링 빈과 의존관계 & MVC 개발하기 예시 기본적으로 Service가 Repository에게 의존하는 것처럼, Controller는 Service에게 의존한다. 방법은 두가지가 있다. (1) 각각의 어노테이션과 autowired를 활용하여 묶어주는 법이 있고, (2) 직접 스프링 빈에 입력해주는 법이 있다.  (1) annotation & autowired를 활용하기어노테이션이 있으면 해당 녀석을 스프링이 먼저 불러올 수 있다 - "컴포넌트 스캔 & 의존성 주입"정확히 말하면, 스프링은 어노테이션이 붙은 클래스들을 스프링 컨테이너에서 관리하는 Bean으로 등록한다. 그리고 Spring은 해당 빈들을 Dependency Injection으로 관리한다.  이때 의존성을 주입하는 방법은 여러가지가 있는데, 기본적으로는 @Autowired를 필수적으로 ..
[스프링 입문] 회원 관리 예제의 백엔드 개발 & 의존성 주입 ▶ Spring Boot에서의 핵심 폴더들 - controller, domain, repository, service 각각의 폴더를 만들고, 각각의 역할을 세분화함으로써 코드를 더 모듈화하고 유지보수하기 쉽게 만들 수 있음. 1 Controller 앱의 웹 계층을 담당하며, 사용자의 요청을 받아 처리하는 역할을 함. 주로 HTTP 요청 담당이라고 생각하면 됨.@Controller 라는 어노테이션이 붙음. @GetMapping, @PostMapping 등도 쓰임.  2 Domain 도메인은 앱의 비즈니스 로직과 관련된 객체들을 정의하는 계층. 주로 Entity - 예를 들면 user나 member 등의 - 클래스들이 이 패키지에 위치함.  3 Repository 데이터 접근 계층을 담당하는데, DB와 상호..
[스프링 입문] 정적 컨텐츠와 MVC, 템플릿 엔진 웹을 개발하는 것은 크게 세가지를 포함한다. 1 정적 컨텐츠 static contents - 순수 HTML 등2 MVC - jsp, php 등의 템플릿 엔진, 순수 HTML 아니고 동적으로 변형한 녀석들. 이걸 스프링에서는 MVC로 표현.3 API   ▶ 스프링에서 static을 다루는 건 쉽다. 앞서 main > resources > static 폴더가 존재한댔는데, 거기에다가 우리의 static 파일 넣어주면 된다.만약 hello-static.html 파일이라면, 기존의 URL의 끝에 해당 파일 이름(~/hello-static.html) 넣어주면 된다.매우 easy peasy. 이렇게 진행되는 과정은 다음과 같다.서버는 들어온 요청이 정적에 대한 요청인지 동적에 대한 요청인지 알 수가 없기 때문에, ..