전체 글 146

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제 만들기

프로젝트 생성 간단한 생성 링크 : https://start.spring.io/ *tip : File > setting > Gradle > intelliJ로 설정해주기 비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용(나중에 변경될 수 있음) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수..

[스프링 입문] AOP

AOP가 필요한 상황 모든 메서드의 호출 시간을 측정하고 싶음 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core corcern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService 회원 조회 시간 측정 추가 long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.printl..

[스프링 입문] 스프링 DB 접근 기술

H2 데이터베이스 설치 순수 Jdbc 스프링 JdbcTemplate JPA 스프링 데이터 JPA H2 데이터베이스 설치 > https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com - h2 접속 시 경로 : ip대신 localhost라고 입력 - JDBC URL은 jdbc:h2:tcp://localhost/~/test : 파일에 직접 접근하는 것이 아닌 소켓을 통한 접근 순수 JDBC 고대의 선배님들이 쓰던 방법(편하게 들으면 됨) build.gradle implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'co..

[스프링 입문] 회원 관리 예제 - 웹 MVC 개발

회원 웹 기능 - 홈 화면 추가 홈 컨트롤러 추가 @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 컨트롤러가 정적 파일보다 우선순위가 높다. 회원 웹 기능 - 등록 *@GetMapping : url에 직접 치면 , 조회 *@PostMapping : data를 form에 넣어 전달 회원 웹 기능 - 조회 memberService의 findMembers() 기능을 이용하기 참고한 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%..

[스프링 입문] 스프링 빈과 의존관계

Member컨트롤러가 MemberService를 통해 회원 가입하고 회원 조회가 가능해야 함 MemberService선언 시 여러 개 선언할 필요가 없다 -> spring 컨테이너에 등록하고 사용하기 @Controller 스프링 빈으로 자동 등록됨 @Autowired MemberService를 스프링이 스프링 컨테이너에 있는 걸 가져다가 연결시켜줌 사용하기 위해서 MemberService.java에 @Service를 넣어줌 -> 스프링 컨테이너에 서비스로 등록 Repository도 마찬가지로 @Repository를 선언해줌 스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링빈 등록하기 1. 컴포넌트 스캔과 자동 의존관계 설정 @Component 애노테이션이 있으..

[스프링 입문] 회원 관리 예제 - 백엔드 개발

1. 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오 : 성능이 중요한 DB로 선정 or 일반적인 관계형 DB로 선정 or NoSQL로 선정) 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 - 서비스 클래스에 핵심 비즈니스 로직이 들어가 있다(ex> 회원은 중복 가입이 안됨) 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB..

Chapter 10. 24시간 365일 중단 없는 서비스를 만들자 (2)

10.2 엔진엑스 설치와 스프링 부트 연동하기 가장 먼저 EC2에 엔진엑스를 설치 엔진엑스 설치 EC2에 접속해서 다음 명령어로 엔진엑스를 설치한다. sudo yum install nginx 설치가 완료되었으면 다음 명령어로 엔진엑스를 실행한다. sudo service nginx start 엔진엑스가 잘 실행되었다면 다음과 같은 메시지를 볼 수 있다. Starting nginx: [ OK ] 외부에서 잘 노출되는지 확인해 보겠다. 보안 그룹 추가 먼저 엔진엑스의 포트번호를 보안 그룹에 추가한다. 엔진엑스의 포트번호는 기본적으로 80이다. 해당 포트 번호가 보안 그룹에 없으니 [EC2->보안 그룹-> EC2 보안 그룹 선택-> 인바운드 편집]으로 차례로 이동해서 변경한다. 리다이렉션 추가 8080이 아닌 ..

Chapter 10. 24시간 365일 중단 없는 서비스를 만들자 (1)

10.1 무중단 배포 소개 예전애는 배포라고 하면 팀의 아주 큰 이벤트이기 때문에 다 같이 코드를 합치는 날과 배포를 하는 날을 정하고 진행했다. 특히 배포일에는 사용자가 적은 새벽 시간에 개발자들이 모두 남아 배포 준비를 해야만 했고 배포가 잦아질 때는 새벽마다 남아야 했다. 배포를 하고 나서 정말 치명적문제가 발생하면 어떻게 해야 할까? -> 새벽 시간에 부랴부랴 문제를 해결하다가, 사용자 유입이 많아지는 아침이 되면 긴급 점검을 공지로 올리고, 수정을 해야 한다. 이렇게 배포가 서비스를 정지해야만 가능할 때는 롤백조차 어려우므로 개발자들이 정말 고생한다. 그리고 서비스 입장에서도 배포만 했다 하면 서비스가 정지돼야 하니 곤혹스럽다 그래서 서비스를 정지하지 않고, 배포할 수 있는 방법들을 찾기 시작했..

chapter 12. 제품 소프트웨어 패키징

릴리즈 노트 작성 시 고려 사항 릴리즈 노트 작성 항목 [2020년 1회] 릴리즈 노트는 특정 소프트웨어의 최근 변경 사항, 개선 사항 및 버그 수정을 간결히 요약한다. 릴리즈 노트 작성 시 다음 항목들이 포함되어야 한다. 작성 항목 설명 헤더 문서 이름(릴리즈 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등의 정보 개요 제품 및 변경에 대한 간략한 전반적 개요 목적 릴리즈 버전의 새로운 기능목록과 릴리즈 노트의 목적에 대한 개요, 버그 수정 및 새로운 기능 기술 이슈 요약 버그의 간단한 설명 또는 릴리즈 추가 항목 요약 재현 항목 버그 발견에 따른 재현 단계 기술 수정/개선 내용 수정/개선의 간단한 설명 기술 사용자 영향도 버전 변경에 따른 최종 사용자 기준의 기능 및 ..

chapter 11. 응용 SW 기초 기술 활용 (2)

OSI(Open System Interconnection) 7 계층 [2020년 1회, 2021년 3회] 국제 표준화 기구인 ISO(International Standardization Organization)에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 개방형 시스템 상호 연결 모델이다. 각 계층은 서로 독립적으로 구성되어 있고, 각 계층은 하위 계층의 기능을 이용하여 상위 계층에 기능을 제공한다. 1 계층인 물리 계층부터 7 계층인 애플리케이션 계층으로 정의되어 있다. 계층을 지날 때마다 헤더가 붙는데, 이것은 해당 계층의 기능과 관련된 제어 정보가 포함되어 있다. 제어 정보들은 모두 운영체제가 제공하는 프로토콜에 의해 송신 측에서는 계층을 지날 때마다 덧붙여서 추가되고..