전체 글

항상 최적의 코드를 고민합니다
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. 프록시 심화 주제 프록시로 조회한 엔티티의 동일성도 보장하는가..
동기/비동기, 블로킹/논블로킹에 대해 공부하다가 문득 프로세스, 스레드, 코어에 대해 궁금증이 생겨서 알아보았습니다. 대학생때 OS수업에서 배웠는데 벌써 까먹은... 그럼 각 용어에 대한 설명부터 해보고 본격적인 설명에 들어가겠습니다. 1. CPU 코어 코어는 CPU 내에서 실제적인 연산과 명령 처리를 담당하는 부분입니다. 한 개의 CPU에 여러 개의 코어가 있을 경우, 각 코어는 독립적으로 명령을 실행할 수 있습니다. 듀얼코어, 쿼드코어 등 우리에게 친숙한 단어입니다. 2. CPU 쓰레드 한 코어 내에서 두 개 이상의 명령 스트림(스레드)을 동시에 처리할 수 있는 능력을 말하며 이를 하이퍼쓰레딩 기술이라고 부르기도 합니다. 하이퍼스레딩은 하나의 물리적 코어가 두 개의 논리적 스레드로 작동할 수 있게 합..
우리는 대게 Entity에 setter 사용을 지양해야 한다는 것을 알고 있습니다. 아직 spring에 대해 깊게 파악하지 못하고 OOP의 본질을 정확히 알지 못하는 저로서는 이 제한이 기능 구현에 꽤 답답함을 느끼게 했습니다. 그래서 이번 포스트에서는 setter 사용을 지양해야하는 이유를 알아보되, 구글링했을시에 나오는 뻔한 답변들과 좀 더 깊은 이유에 대해서 알아보고 제가 느꼈던 불편함들과 이에 대한 해결방안을 알아보도록 하겠습니다. # Entity에 setter를 사용하지 않는 (뻔한) 이유 1. 의도를 파악하기 어렵다. @Service public class TempService { public void update(Long id, String name){ Temp temp=tempReposit..
whitem4rk
high-end back-end