0. Previous 이전에 우리는 순수 자바코드를 통해서 DI를 주입한 AppConfig 파일을 스프링을 사용해서 DI를 주입하도록 수정했다. AppConfig 스프링 기반으로 변경하기 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hel..
0. Previous 저번 게시물에 순수 Java 소스만으로 요구사항에 해당하는 소스를 작정했다. 이번에는 이전에 작성한 코드가 과연 객체지향 설계 원칙을 잘 준수 했는지 확인하면서 스프링 핵심 원리를 이해해보고자 한다. 1. 새로운 할인 정책 개발 기존에 개발된 코드는 할인 정책을 정액 할인 정책을 적용해서 VIP일 경우 무조건 1000원을 할인해주는 방식이었다. 근데 갑자기 기획자가 오더니 VIP일 경우 주문 금액의 10% 할인해주는 정률 할인 정책으로 변경해달라고 한다. 이번에는 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가하도록 하자. 기존에 우리는 객체 지향 설계를 잘 활용해 DiscountPolicy는 역할, FixDiscountPoliy로 구현을 했다. 이번에는 정률 할인 정책..
0. Previos 스프링의 핵심 원리 이해를 위해 순수 자바로 예제를 만들어본다. 1. 프로젝트 생성 사전 준비물 Java 17 설치 IDE: IntelliJ 또는 Eclipse 설치 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성(https://start.spring.io) 이렇게 프로젝트를 생성해서 IDE로 실행하도록 하자. 다 되었다면 src/main/java/hello/core/CoreApplication.java에 들어가 실행시켜보자. 2. 비즈니스 요구사항과 설계 이 강의해서 진행하는 비즈니스 요구사항은 아래와 같다. 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확..
객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다. (출처 :..
git 이란? 형상 관리 시스템(Verson Control System) 의 한 종류입니다. 주로 개발자들이 프로그램과 관련된 파일들을 저장하는 데 사용합니다. 게임의 세이브 포인트와 유사한데, 언제든지 저장 시점으로 되돌아 갈 수 있습니다. 즉, 주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때 소스 코드를 관리하는데 주로 사용된다. git과 github의 연관성? 깃과 깃 허브는 뗄레야 뗄 수 없는 관계이다. 그렇지만 두 가지 개념에 대해 혼동해서는 안된다. git 로컬에서 관리되는 버전 관리 시스템 직접 소스 코드를 수정함으로서 버전을 관리 소스 코드를 효율적으로 관리할 수 있게 해주는 형상 관리 도구 github 깃(git)을 사용하는 프로젝트를 지원 개발자의 버전 제어 및 협업..
더보기 순수 JDBC 스프링 통합 테스트 스프링 JdbcTemplate JPA 스프링 데이터 JPA 먼저 데이터베이스의 흐름을 알고자 지금은 사용하지 않은 순수 JDBC를 활용해 기존 회원가입 및 목록 확인 소스에 JDBC를 연결해보자. 1. 순수 JDBC db는 강의에서 알려준 h2 데이터베이스를 활용했다.(https://www.h2database.com/html/main.html) 환경설정 1-1. build.gradle 파일에 jdbc, h2 데이터베이스관련라이브러리추가 implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' 1-2. resources/application.pro..
1. 회원 웹 기능 - 홈 화면 추가 1-1. 홈 컨트롤러 추가 HomeController 파일을 새롭게 생성했다. package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home(){ return "home"; } } @GetMapping("/")라는 것은 localhost:8080/ 요청시 나타내는 홈화면을 나타낸다. 1-2. 회원 관리용 홈 localhost:8080..
1. 스프링 빈(bean) 이란? 더보기 스프링(Spring) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다. 스프링의 특징에는 제어의 역전(IoC)이 있다. 제어의 역전이란, 간단히 말해서 객체의 생성 및 제어권을 사용자가 아닌 스프링에게 맡기는 것이다. 지금까지는 사용자가 new연산을 통해 객체를 생성하고 메소드를 호출했다. IoC가 적용된 경우에는 이러한 객체의 생성과 사용자의 제어권을 스프링에게 넘긴다. 사용자는 직접 new를 이용해 생성한 객체를 사용하지 않고, 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이 객체를 '빈(bean)'이라 한다. 2. 스프링 빈(bean)을 스프링 컨테이너에 등록하는 방법 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기 2-..
회원 관리 예제 - 백엔드 개발 1. 비즈니스 요구사항 정리 2. 회원 도메인과 리포지토리 만들기 3. 회원 리포지토리 테스트 케이스 작성 4. 회원 서비스 개발 5. 회원 서비스 테스트 1. 비즈니스 요구사항 정리 - 데이터: 회원ID, 이름 - 기능: 회원 등록, 조회 - 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 보통 일반적인 웹 어플리케이션의 계층 구조는 아래와 같다. 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체 (ex. 회원, 주쿤, 쿠폰 등등 주로 데이터 베이스에 저장하고 관리됨) 해당 예제의 클래스 의존 관계는 다음과 같다. (실선: 클래스 상속, ..
개발자 채용공고 글을 보다보면 왠만한 큰 회사들이 우대사항에 적어놓는 내용이 있다. '대규모 트래픽 및 대용량 데이터 처리 경험 우대' 물론 나는 아직 대규모 트래픽 처리에 대한 경험이 존재하지 않는다. 따라서 어떻게 하면 대용량 트래픽을 잘 다룰 수 있을지 궁금해져서 공부하기로 했다. 많은 사용자가 서비스를 이용하면 그만큼 서버에게 많은 요청이 가게 된다. 웹 서비스를 제공한다면 웹 서버가, API 서버를 운영한다면 API 서버와 데이터베이스에게도 요청이 가게 된다. 이때 요청이 많아졌다는 말을 '트래픽이 높아졌다' 라고 이야기한다. 트래픽이 높아질수록 서버는 바빠진다. 서버는 하나의 프로그램에서 돌아가게 되는 것이며, 요청에 응답하기 위해 해당 컴퓨터의 CPU, 메모리를 사용하게 된다. 트래픽이 높아..