Back-end

https://whitem4rk.tistory.com/62 Blue/Green 배포 (Nginx + github actions) without Dockerhttps://whitem4rk.tistory.com/61 무중단 배포 전략 (Continuous Deployment)철수는 오늘따라 게임이 너무 하고 싶습니다. 컴퓨터를 켰지만 화가나게 윈도우 업데이트가 자동으로 수행됩니다. 철수는 너무 너whitem4rk.tistory.com 저번 포스트에서 nginx + github actions만을 사용해서 ec2에서 직접 서버를 실행하는 방식에 대해서 설명했습니다. 이번 포스트에서는 각 서버들을 docker 컨테이너로 관리하고 실행하고자 합니다. 여러개의 컨테이너를 서로 연결하려니 생각보다 어려운점이 많았습니다..
https://whitem4rk.tistory.com/61 무중단 배포 전략 (Continuous Deployment)철수는 오늘따라 게임이 너무 하고 싶습니다. 컴퓨터를 켰지만 화가나게 윈도우 업데이트가 자동으로 수행됩니다. 철수는 너무 너무 답답했습니다. 이 처럼 유저가 서비스를 이용할 수 없는 시whitem4rk.tistory.com 우선 저번 포스트에서 배포전략을 알아보았고 제 입맛에 맞는 배포흐름을 대강 짰습니다. 이제 구현을 해볼 차례인데 제가 사용한 툴들은 [github actions, nginx, spring, spring cloud config(아니어도됨)] 요정도 입니다. 구글링 해보니 생각보다 이 방식을 사용한 분들이 많더라구요. 그러다 제 구조랑 가장 비슷했던 블로그 포스트를 찾았습..
철수는 오늘따라 게임이 너무 하고 싶습니다. 컴퓨터를 켰지만 화가나게 윈도우 업데이트가 자동으로 수행됩니다. 철수는 너무 너무 답답했습니다. 이 처럼 유저가 서비스를 이용할 수 없는 시간을 downtime이라고 합니다.하지만 컴퓨터가 2대라면 어떨까요? 응 다른 컴퓨터로 게임하면 그만이야~ 서비스를 운영할 때도 이와 같은 상황이 존재합니다. 서버가 1개일 때 구버전의 서비스를 신버전으로 교체하기 위해서는 불가피하게 일정시간동안 서버를 꺼야합니다. 이는 사소해 보이지만 보안의 6요소중 하나인 availability(고가용성)을 보장하지 않습니다. 사용자가 매번 서버의 상황을 이해하고 지켜볼 의무는 없습니다. 그럼 이런 downtime없이 업데이트를 하는 방법(무중단 배포)은 무엇이 있을까요?일단 최소 서버..
· Back-end
최근에 나는 자바를 내 입맛대로, 올바르게 사용하고 있는가에 대한 의문이 생겨 공부 거리를 찾아보니 이펙티브 자바라는 책을 발견했습니다. 이전에도 한번 읽어보려고 노력했으나 ITEM 1 부터 무슨 소린지 이해할 수 가 없어서 포기했었는데 다시 시도해보고 싶어졌습니다. 여전히 무슨 내용인지 모르겠지만… 결국 반복학습으로 이해할 날이 올 것을 기대하며 제 나름의 이해한 내용을 남겨봅니다.이 내용을 이해하기엔 아직 부족해서 설명이 다소 두루뭉술할 수 있습니다…  1. 생성자 대신 static 팩토리 메소드를 고려해라 가장 기본 적인 인스턴스 생성 방법 - public 생성자정적 팩토리 메소드는 의도가 뚜렷한 인스턴스 생성 가능 ex) Boolean valueOf()public static Boolean val..
· Back-end
직렬화와 역직렬화에 대해서 대부분은 알고 있습니다. 하지만 왜 사용해야하며 어떤 상황에는 쓰지 않아도 되는지는 잘 모릅니다. 제 참신한 궁금증으로 한번 설명해보겠습니다.직렬화 / 역직렬화란 (Serializable / Deserializable)먼저 컴퓨터 공학에서 말하는 직렬화 / 역직렬화에 대해서 알아보겠습니다. 직렬화 - 디스크에 저장, 네트워크 통신에 사용하기 위한 형식을 변환하는것역직렬화 - 디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터 메모리에 쓸 수 있도록 변환하는것일종의 인코딩, 디코딩 같은 느낌인데 왜 우리는 형식을 변환시켜야 하는걸까요?데이터 들의 메모리 구조는 크게 value type(스택에 쌓임), reference type(힙에 메모리 할당, 스택은 힙 주소)로 나..
1. 예외 처리 - JPA 예외는 모두 Unchecked Exception 트랜잭션 롤백을 표시하는 예외 - 심각한 예외, 복구해선 안됨 (엔티티 중복, 부재, 낙관적 락, 비관적 락 등)트랜잭션 롤백을 표시하지 않는 예외 - 호출 시 결과가 없을때, 시간 초과JPA 예외들은 스프링 예외로 변경됩니다.ex)javax.persistence.PersistenceException -> org.springframework.orm.jpa.JpaSystemException 등  2. 엔티티 비교 다른 영속성 컨텍스트라면 DB상의 같은 ROW라 하더라도 "==" 으로 비교할 수 없다. 식별자(ID)를 비교하거나 equals 재정의를 통해 비교해야함  3. 프록시 심화 주제 프록시로 조회한 엔티티의 동일성도 보장하는가..
우리는 대게 Entity에 setter 사용을 지양해야 한다는 것을 알고 있습니다. 아직 spring에 대해 깊게 파악하지 못하고 OOP의 본질을 정확히 알지 못하는 저로서는 이 제한이 기능 구현에 꽤 답답함을 느끼게 했습니다. 그래서 이번 포스트에서는 setter 사용을 지양해야하는 이유를 알아보되, 구글링했을시에 나오는 뻔한 답변들과 좀 더 깊은 이유에 대해서 알아보고 제가 느꼈던 불편함들과 이에 대한 해결방안을 알아보도록 하겠습니다. # Entity에 setter를 사용하지 않는 (뻔한) 이유 1. 의도를 파악하기 어렵다. @Service public class TempService { public void update(Long id, String name){ Temp temp=tempReposit..
· Back-end
# 문제상황 Spring 프로젝트를 하면서 인증 관련 코드들을 많이 수정했습니다. 원래 의도했던 방식은 OAuth 인증과 JWT 인증을 잘 분리해서 JWT 인증 부분만 테스트에 적절하게 적용시키는 것이었으나 Bean 관리가 아직 서툴러서 JWT 부분만 딱 떼어낼 수 없었습니다. (많이 노력하다 결국 실패했지만 추측컨대 분명 가능한 방식이라 생각합니다.) 그렇다보니 Oauth 인증에 필요한 설정값들이 test/application.yml에 포함되어야 하는 상황이 발생했습니다. 이 상황에서 2가지 문제가 발생했습니다. OAuth 설정값들을 test/application.yml에 평문으로 저장해서는 안되기에 뭔가 암호화하거나 숨겨야만 했습니다. 프로젝트 내에서 PR 또는 PR에 쌓이는 커밋이 생성될때 마다 전..
whitem4rk
'Back-end' 카테고리의 글 목록