백엔드 28

6- ci/cd (2)

수동으로 배포해보자 ec2 인스턴스를 생성하고 Spring Boot 서버를 띄어보는 것 까지 진행한다. 인스턴스 생성하고 보안그룹 설정하는건 이 블로그를 참고하였다. https://bcp0109.tistory.com/356 AWS 1편: EC2 생성 후 Spring Boot 띄우기Overview AWS EC2 인스턴스를 생성하고 Spring Boot 서버를 띄워보는 것까지 진행합니다. 주 목표는 서버를 외부에 제공하는 거라서 따로 배포 시스템을 구축하지 않고 단순히 빌드 파일을 복사해서 수bcp0109.tistory.com그 다음 jar 파일을 생성하자 ./gradlew build명령어를 입력하면프로젝트 파일위치에서 build/lib폴더에 jar파일이 생성된다  이제 그 파일을 ec2서버에 올려보자 sc..

6- ci/cd (1)

ci/cd에 대해 알아보자 CI란? ci는 Continuous Integration의 약자로 지속적인 통합이라는 의미다.어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되고공유레포지토리에 통합하는 것을 의미한다. 이러한 환경에서 쓰면 좋다.다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경git과 같은 형상관리 툴을 사용할 때 많은 작업을 하면 commit들이 쌓이게 된다.그때 기능별로 빌드/테스트/병합(Merge)까지 하려면 상당히 번거롭게 된다.이런 상황에서 자동화된 빌드/테스트를 통해 원천 소스코드의 충돌 등을 방어할 수 있다.  MSA(Micro Service Archietecture) 환경최근 IT 업계에서 붐처럼 떠오르고 있는 아키텍처 모델이다.MSA는 작은 기능별로 서비스..

5- 동시성 처리 (2)

지난 시간에 동시성 처리에 대해 알아봤다더 이어서 알아보자 ConcurrentHashMap현업에서 제일 많이 사용하고 김영한 강사님도 언급한 ConcurrentHashMap이다.  hashtable vs hashmap vs  concurrentHashMap hashtable public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { public synchronized int size() { } @SuppressWarnings("unchecked") public synchronized V get(Object key) { } public synchronized V put(..

5- 동시성 처리 (1)

동시성 처리에 대해 알아보자 동시성을 알아보기 전에 알아야하는 배경지식들이 많아 그거에 대해 먼저 알아보자. 동시성을 검색해보면 스레드 개념이 나온다.스레드란 무엇일까?? 스레드(Thread) 특정 작업을 수행하는 소프트웨어를 프로그램이라고 한다.이러한 프로그램이 실제로 실행되어 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 한다.스레드는 이 프로세스를 구성하는 하나의 단위이다.하나의 프로세스에는 여러 스레드가 작동할 수 있다. 아무래도 같은 프로세스안에 여러 스레드가 존재하기 때문에 같은 자원을 공유할 수 있다. 같은 자원을 공유할 수 있다는 말은 동시에 여러가지 일을 같은 자원을 두고 수행할 수 있다는 것이고 이는 곧 병렬성의 향상으로 이어진다. 물론 여러 스레드에 대해 장점만 있는건 아..

4- 스프링 시큐리티 + jwt(2)

jwt에 대해 알아보자 jwt를 제대로 알아보기전에 비슷한 인증방식인 쿠키, 세션에 대해 먼저 알아보자 쿠키란?클라이언트가 웹사이트를 방문할 때 그 사이트가 사용하고 있는 서버를 통해 클라이언트 브라우저에 설치되는 작은 기록 정보 파일1. 브라우저가 서버에 요청을 보낸다.2. 서버는 클라이언트 요청에 대해 응답으로 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie를 하여 보낸다.3. 이후 클라이언트는 요청을 보낼 때마다 클라이언트에 저장된 쿠키를 요청 헤더의 담아 보낸다. 쿠기 단점1. 보안에 취약하다. 클라이언트가 서버로 보낼 때 그대로 값을 보내기 때문에2. 사이즈가 커질수록 네트워크 부하가 심해진다. 세션인증이러한 쿠키의 보안적인 이슈를 해결하기 위해 민간한 정보들을 서버측에 저..

3- 스프링 시큐리티 + jwt (1)

스프링 시큐리티에 대해 알아본다.스프링 시큐리티란?Spring Security는 인증, 권한, 관리 그리고 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크 일반적으로 로그인,로그아웃,세션관리, 권한관리 등 개발자들의 보안 관련 기능을 효율적이고 신속하게 구현할 수 있도록 도와준다. 스프링 시큐리티 사용하는 이유?시큐리티를 사용하지 않고 코드를 직접 작성하면 IoC/DI 패턴과 같은 확장 패턴을 염두해서 인증/인가 부분을 직접 개발하기는 쉽지 않다. 하지만 스프링 시큐리티는 이와 같은 기능들을 제공해 주어서 개발 작업 효율을 높일 수 있다. 스프링 시큐리티 아키텍처는 무엇인가요?스프링에서 프레임워크나 라이브러리를 사용했을 때..

2- TDD(2)

테스트코드가 무엇이고 tdd 실전코드 지난 시간 스터디내용을 착각해서 tdd만 조사했다. 이번 시간은 테스트코드는 무엇인지, tdd의 실제코드를 알아보자. 테스트 코드는 소프트웨어의 기능과 동작을 테스트하는데 사용하는 코드이다. 결함을 찾아내고 수정하는 과정이다. 테스트코드를 작성하면 개발자는 소프트웨어가 어떻게 작동하는지, 예상치 못한 부작용을 방지할 수 있다. 또한 개발자간의 협업을 원활하게 하고, 문서화 작업을 줄일 수 있다. 테스트코드에는 단위 테스트, 통합테스트, 시스템 테스트, 사용자 인수 테스트 등 다양한 종류가 있다. 공통점은 기대한 입력값과 출력값을 반환하는지 확인한다. 차이점이 있다면 테스트 대상의 범위가 다르다. 1. 단위테스트란? 개별적인 코드단위(보통 함수, 메서드)가 의도한 대로..

1- TDD(1)

중요한건 실패하는 테스트코드를 작성할 때 까지 실제 코드를 작성하면 안된다. 또한 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야한다. 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다. 일반 개발 방식 VS TDD 개발 방식 일반 개발 방식 일반적으로 요구사항분석ㅡ>설계ㅡ>개발ㅡ>테스트ㅡ>배포의 형태로 개발주기를 갖는다. 이러한 방법은 개발을 느리게 하는 잠재적 위험이 존재한다. 1. 소비자의 요구사항이 처음부터 명확하지 않을 수 있다. 따라서 첨부터 완벽한 설계는 어렵다. 2. 자체 버그 검출 능력 저하 또는 소스코드의 풀질이 저하될 수 있다. 3. 자체 테스트 비용이 증가할 수 있다. 설계는 처음부터 완벽할 수 ..

aop

advice 실행하려고 하는 코드 pointcut 해당 코드를 언제 실행할 것인가에 대한 표현식 이 ex) execution(* com.in28minutes.learnspringaop.aopexample.business.*.*(..)) Aspect advice + pointcut Weaver aop를 구현한 프레임워크 ex) AspectJ, Spring AOP Join Point pointcut이 참일 때 advice가 실행되고 advice의 실행 인스턴스 @After 메소드가 성공하든 exception을 던지든 실행함 @AfterReturning 메소드가 성공할 때만 실행함 @AfterThrowing 메소드가 exception을 던질때만 실행함 @Pointcut 사용할 때 위치를 찾아서 할 수있지만, ..

Repository vs Dao

Dto는 아는데 Dao는 들어만 봤지 어떤 것인지 몰라 정리하게 되었습니다! DAO Dao(Data Access object)는 데이터에 접근하기 위한 객체로 데이터베이스 혹은 다른 영속성 매니커즘에 대한 접근을 추상화 해주는 역할 + 영속성 : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미 어플리케이션에서 저장소에 접근하기 위해 DB 종류별로 저장소에서 제공하는 API를 통해 접근한다. 하지만 이 과정에서 문제점이 있다. 첫번째, 구현체와 로직이 너무 강한 결합을 가지게 된다. 만일 내가 영구 저장소를 Mysql을 쓰고 있었다고 가정해 보자. 이때 영구저장소를 Oracle로 바꿔야 한다는 요구사항이 들어왔다면, 우리는 Mysql의 API를 사용한 모든 구현을 변경해야..

백엔드 2023.10.19