Spring

· Spring/JPA
본 포스팅은 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다. 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결 할 수 있도록 하나의 규약 형태로 만들어 놓은 것 싱글톤 패턴(singleton pattern) 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 DB 연결 모듈에 많이 사용 장점: 하나의 인스턴스만 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어드는 장점 단점: 의존성이 높아진다. 싱글톤 패턴의 단점 TDD 시 걸림돌 단위 테스트는 서로 독립적이어야 하며 테스트르 어떤 순서로든 실행할 수 있어야 한다. 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴..
개념 CI/CD (Continuous Integration/Continuous Delivery) 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법 CI/CD의 기본 목적은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포 CI/CD의 목적을 이해하기 위해서는 코드 배포의 과정을 먼저 이해할 필요가 있다. 코드 배포의 과정 프로그래밍의 목적은 결국 사용자에게 우리의 코드를 결과물로써 보여주는 것이다. 그렇다면 그 과정은 어떠할까? 1. 컴파일 컴파일이란 우리가 만든 프로그래밍 언어를 기계가 이해할 수 있는 언어로 번역하는 과정이다. 프로그래머가 사용하는 C, java 등의 언어는 기계가 이해할 수 없다. 이러한 언어는 컴파일러가 기계가 이해할 수 있게 도와준다. 이러한 과정을 컴파일이라..
9장에서 Travis CI를 활용해 배포 자동화 환경을 구축해 보았다. 하지만 배포하는 동안 애플리케이션이 종료된다는 문제가 남아있다. 긴 기간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단됨. 반면 카카오톡 같은 서비스의 경우 배포하는 동안 서비스가 정지되지 않는다. 어떻게 서비스 중단 없이 배포를 걔속 할 수 있는지 이번장에서 해보자. 10.1 무중단 배포 소개 예전에는 배포라고 하면 팀의 아주 큰 이벤트이기 때문에 다 같이 코드를 합치는 날과 배포를 하는날을 정하고 진행하였다. 특히 배포일에는 사용자가 적은 새벽기간에 개발자들이 모두 남아 배포 준비를 해야만 했고 배포가 잦아질 때는 새벽마다 남아야했다. 더군다나 배포하고 나서 치명적인 문제가 발견된다..
24시간 365일 운영되는 서비스에서 배포 환경 구축은 필수 과제 중 하나이다. 여러개발자의 코드가 실시간으로 병합되고, 테스트가 수행되는 환경, master브랜치가 푸시되면 배포가 자동으로 이루어지지는 환경을 구축하지 않으면 실수할 여지가 많다. 9.1 CI & CD 소개 8장에서 스프링 부트 프로젝트를 간단하게 EC2에 배포해 보았다. 스크립트를 개발자가 직접 실행함으로써 발생하는 불편을 경험했다. 그래서 CI, CD환경을 구축하여 이 과정을 개선하려한다. CI(Continuous Integration - 지속적 통합) 코드버전 관리를 하는 VCS 시스템(Git, SVN)에 push가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정 CD(Continuous Deployment..
1 ~ 5장 스프링부트로 서비스 코드 개발 6 ~ 7장 배포 환경 구성. 이제 이들을 조합해 실제로 서비스를 배포해보자. 8.1 EC2에 프로젝트 clone 받기 git yum install git EC2에 git 설치 git --version git version 확인 mkdir ~/app && mkdir ~/app/step1 디렉토리 생성 git clone 깃허브프로젝트주소 프로젝트 깃헙에서 받아오기 ./gradlew test 로확인 chmod +x ./gradlew 권한 없다 뜨면 권한 주기 8.2 배포 스크립트 만들기 배포-> 작성한 코드를 실제 서버에 반영하는 것. 이 책에서는 배포라고 하면 다음의 과정을 모두 포괄하는 의미. git clone 혹은 git pull 을 통해 새 버전의 프로젝트 ..
웹 서비스의 백엔드를 다룬다고 했을 때 애플리케이션의 코드를 작성하는 것만큼 중요한 것이 데이터베이스를 다루는 일이다. 규모있는 회사에서는 DB를 전문적으로 처리하는 DBA라는 직군이있다. 그러나 이것이 백엔드개발자가 DB를 몰라도 된다는 것을 의미하지는 않음. 이번에는 EC2 서버와 연동을 해보자. 그러나 직접 DB를 설치하진 않음. 직접 DB를 설치해서 다루게 되면 모니터링, 알람 백업, HA구성등을 모두 직접 해야한다. 이는 처음에 며칠씩 걸릴 수 있는일. AWS에서는 앞에서 언급한 작업을 모두 지원하는 관리형 서비스인 RDS(Relational Database Service)를 제공. RDS는 AWS에서 지원하는 클라우드 기반 관계형 DB. 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 ..
이제 AWS(Amazon Web Services)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행해 보자. 외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수이다. 24시간 작동하는 서버는 3가지 선택지가 있다. 집에 PC를 24시간 구동시킨다. 호스팅 서비스(Cafe 24, 코리아 호스팅 등)을 이용한다. 클라우드 서비스(AWS, AZURE, GCP) 등을 이용한다. 일반적으로 비용이 싼 것 -> 호스팅 서비스, 집에서 돌리기(전반적으로 일정한 트래픽이 유지될때) 특정시간에만 트래픽이 몰린다면 -> 클라우드 서비스 ( 유동적으로 사양을 늘릴 수가 있다.) 클라우드 서비스 -> 클라우드(인터넷)을 통해 서버, 스토리지(파일 저장소), DB, Network, 소프트웨어, 모니터..
스프링 시큐리티 -> 막강한 인증(Authentication)과 인가(Authorization) 기능을 가진 프레임워크 5.1 스프링 시큐리티와 스프링 시큐리티 Oauth2 클라이언트 많은 서비스에서 로그인 기능을 id/password 보다는 구글, 페이스북, 네이버 로그인과 같은 소셜로그인 기능을 사용 -> why ?? 배보다 배꼽이 커지는 경우가 많기 때문에. 직접 구현하면 구현해야할 내용 로그인시 보안 회원가입 시 이메일 혹은 전화번호 인증 비밀번호 찾기 비밀번호 변경 회원정보 변경 Oauth 로그인 구현시 앞선 목록의 것들은 모두 구글, 카카오, 페이스북에 맡기면 되니 서비스개발에 집중할 수 있다. spring-security-oauth2-autoconfigure 라이브러리를 사용하면 스프링2에서..
템플릿 엔진 지정된 템플릿 양식과 데이터가 합쳐저 HTML문서를 출력하는 S/W를 이야기함. 서버템플릿 엔진 -> 서버에서 구동됨. JSP 같은 경우에는 서버에서 자바코드로 문자열을 만든뒤 이것을 HTML로 변환하여 브라우저로 전달 javascript같은 경우에는 브라우저 위에서 작동한다. 즉 브라우저에서 작동될때는 서버템플릿엔진의 손을 벗어나 제어X 즉 vue.js 나 react.js (클라이언트 템플릿엔진)는 브라우저에서 즉 화면을 생성. 서버에서 이미 코드가 벗어난 경우이다. 클라이언트 템플릿 엔진 머스테치란? 수많은 언어를 지원하는 가장 심플한 템플릿 엔진. 그외에도, JSP, Velocity, Freemarker, Thymeleaf등등이 있다. java/org/example/awsspring/w..
컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 자바코드에 직접 @Bean을 통해 설정정보에 직접등록할 스프링빈을 나열했다. 이렇게하면 누락하는 문제도 발생. 그래서 스프링은 설정정보가 없어도 자동으로 스프링빈을 등록하는 컴포넌트스캔이라는 기능을 제공. 또의존관계 자동주입하는 @Autowired기능도 제공 기존 Appconfig 대신 AutoAppConfig생성 @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)//예제를 안전하게 하기 위해 Configuration붙은 클래스는 제외 )// 자동으로 스프링빈에 등록 p..
웹서비스를 개발하고 운영하다 보면 피할 수 없는 문제 -> DB를 다루는 일. MyBatis 같은 sql mapper를 이용하면 개발보다 sql을 다루는 시간이 더 많음. 객체 모델링 보다 테이블 모델링에만 집중하는 일이 일어남. -> JPA 라는 자바 표준 ORM(object Relational Mapping) 기술을 만나게 됨. JPA 소개 관계형 DB가 웹 애플리케이션의 빠질 수 없는 요소로 되어 감. 애플리케이션 코드보다 SQL 쿼리가 가득하게 됨. 개발자가 아무리 아름답게 자바코드를 설계해도 sql을 통해 DB를 다룰 수 있음. 실제 현업에서는 수십, 수백개의 테이블이 있고, 이테이블의 몇 배나 되는 sql을 만들고 유지 보수 해야함. 단순반복작업을 수백번 해야하는 스트레스. 또 다른 문제 패러..
@ExtendWith(SpringExtension.class) @WebMvcTest(controllers = HelloController.class) class HelloControllerTest { @Autowired private MockMvc mvc; @Test public void hello가_리턴된다() throws Exception{ String hello = "hello"; mvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string(hello)); } } @ExtendWith @WebMvcTest - 여러 스프링 테스트 어노테이션 중 Web(Spring Mvc)에 집중할 수 있는 어노테이션 - 선언할 경..
LTSGOD
'Spring' 카테고리의 글 목록