목록전체 글 (531)
개발놀이터
앞선 포스팅에서 우리는 VPC와 서브넷, 라우터와 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이까지 알아봤습니다. 이번 포스팅에선 그 중 첫 번째 단계라고 볼 수 있는 VPC와 서브넷을 만들어 볼 것입니다. 개념적인 부분에 대해서 아직 모르고 계시다면 앞선 포스팅을 참고해주세요! https://coding-review.tistory.com/451 데이터베이스 서버와 애플리케이션 서버를 분리해보자 : 개념 저는 항상 의문점이 있었던 것이 애플리케이션 서버와 데이터베이스 서버를 나누게 되면 이 둘은 어떻게 통신을 하는가? 였습니다. 제가 기존에 배포하던 방식인 EC2 인스턴스에 애플리케이션과 coding-review.tistory.com VPC 생성과 서브넷 생성 1. VPC 생성 AWS 검색창에 V..
저는 항상 의문점이 있었던 것이 애플리케이션 서버와 데이터베이스 서버를 나누게 되면 이 둘은 어떻게 통신을 하는가? 였습니다. 제가 기존에 배포하던 방식인 EC2 인스턴스에 애플리케이션과 데이터베이스를 동시에 두게 되면 보안상 좋지 않다는 말을 들었습니다. 그래서 이 부분에 대해서 GPT에게 물어봤더니 VPC를 사용하면 된다는 말만 끊임없이 하더군요. 그 당시에는 VPC가 뭔지 도 몰랐고 그냥 VPC를 쓰면 되는구나 하고 넘어갔습니다. 이번 포스팅에선 본격적으로 VPC를 이용해 애플리케이션 서버와 데이터베이스 서버를 분리시켜보도록 하겠습니다. 시작해보죠. VPC가 뭐야? VPC는 Virtual Private Cloud의 약자로 직역하면 가상의 클라우드 환경이라는 말입니다. 만약 VPC가 없다면 각각의 인..
블루 그린 배포를 하는 과정에서 한 가지 문제가 생겼습니다. AWS의 로드밸런서인 ALB의 타겟그룹을 수동으로 바꿔줘야 한다는 것이었죠. CLI로 타겟 그룹을 바꿀 수 있다는 사실을 몰랐던지라 이를 어떻게 자동화할지 몰랐고 덕분에 컨테이너와 이미지를 없애고 다시 블루 버전을 띄워서 블루 그린 배포인데 블루 버전만 사용하는 아이러니함이 생겼죠. 새로운 프로젝트를 진행하다가 챗 지피티한테 궁금해서 물어봤습니다. "AWS CLI로 타겟 그룹을 변경할 수 있어?" "그럼요~" 예제 코드까지 친절하게 알려줘서 덕분에 성공할 수 있었습니다 (GPT 최고!). 그럼 이제 본격적으로 AWS CLI로 타겟 그룹을 변경하는 포스팅을 진행해보도록 하겠습니다. AWS CLI가 뭐야? 우리는 AWS의 시스템을 이용할 때 AWS..
이번 포스팅에선 제 프로젝트의 JWT 필터를 리팩토링 해보도록 하겠습니다. 우선 제 코드를 보여드릴텐데요. 정말 그지같지않을 수 없습니다. if else if else 몇번을 진행한건지 참... 한번 리팩토링 진행해보도록 하겠습니다. 클린 코드를 읽은 개념들을 바탕으로 리팩토링 해보겠습니다. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 1. Request Header 에서 JWT 토큰 추출 String token = resolveToken((HttpServletRequest) request); Authenticati..
이번 포스팅에선 책 클린코드에서 나온 예제인 switch문을 인터페이스, 추상클래스로 리팩토링 하는 방법에 대해서 포스팅해보도록 하겠습니다. 사실 책에서는 두루뭉실하게 얘기하기 때문에 조금 와닿지 않아서 개인적으로 토이프로젝트를 한번 만들어 봤습니다. 추상클래스와 인터페이스는 최근에서야 온전히 이해하기 시작해서 조금 미숙할 수 있습니다. public Money calculatePay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSTION -> { return calculateCommisstionPay(e); } case HOURLY -> { return calculateHourlyPay(e); } case SALARIED -..
이번 포스팅은 함수입니다. 우리는 개발할 때 수십개 수백개도 더 함수를 만들어냅니다. 정작 함수가 어떻게 읽기 좋게 쓰여지는지는 별로 고민하지 않는 제 모습을 봤습니다. 여기서 로버트 C.마틴의 말을 인용하면서 시작해보겠습니다. "함수를 만드는 첫번째 방법은 작게 만드는 것이다. 그리고 두번째 방법은 더 작게 만드는 것이다. 함수는 100줄을 넘어서는 안된다. 아니! 20줄도 넘어서는 안된다!" -로버트 C.마틴 함수 한 가지만 해라 함수 하나가 버퍼도 처리하고, 페이지도 가져오고, 상속된 페이지를 검색하고, 경로를 렌더링하고, 문자열을 덧붙이고, HTML 파일을 생성하는 만능 함수를 한번쯤 만들어보셨을겁니다. 이에 로버트 C.마틴은 "함수는 한 가지를 해야하고, 그 한가지를 잘해야하며, 그 한가지만을 ..
우리는 이름을 정말 많이 짓습니다. 클래스, 변수, 인터페이스, 추상 클래스, JAR파일, WAR파일 모두 이름을 붙이게 됩니다. 그러므로 이름을 잘 붙이는 것은 의미있습니다. 그리고 잘 못지은 이름은 가독성을 떨어뜨리기 마련이죠. 이번 포스팅에선 의미있게 이름을 붙이는 방법에 대해서 설명해보도록 하겠습니다. 의미있는 이름 의도를 분명히 밝혀라 우리는 가끔 변수명을 이렇게 짓곤 합니다. int d; 하지만 개발할 때 당시만 기억나고 한참 뒤에 이 변수를 보면 무슨 변수인지 헷갈릴 때가 많습니다. 그러므로 우리는 아래와 같이 바꿔야합니다. int daysSinceModification; 이에 조금 연장선상의 코드들을 한번 보시죠. public List getThem() { List list1 = new A..
로버트 C.마틴의 클린 코드를 읽었습니다. 책을 읽고 리팩토링의 중요성을 알게 되었고 제 코드에 녹여 내볼 생각입니다. 책을 읽으니 무지성으로 작성한 제 코드들이 눈앞에 휙휙 지나가더군요. 얼른 책을 다 읽고 리팩토링 해보고 싶습니다. 이 카테고리에선 리팩토링을 어떻게 진행해야 하는지 코드레벨에서 설명합니다. 출처는 클린 코드 저서구요. 리팩토링을 통해 얻을 수 있는 것들과 다양한 경험들을 소개해드리고자 합니다. 마지막으로 책의 첫부분을 인용하면서 리팩토링 카테고리 시작하도록 하겠습니다. "중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화 하라" -로버트 C.마틴
Q. 트랜잭션 전파단계에 대해서 설명해주세요 A. 스프링은 여러개의 트랜잭션 연산을 하나로 통합하기위해 물리 트랜잭션과 논리 트랜잭션이라는 개념을 도입했고 이로인해 트랜잭션 연산들이 전파되면서 원자성을 보장할 수 있었습니다. JPA에서는 다양한 트랜잭션 전파 단계를 지원하는데 디폴트값인 REQUIRED부터 무조건 새로운 트랜잭션을 만드는 REQUIRES_NEW 그외에도 SUPPORTS, NOT_SUPPORTED, NESTED, NEVER, MANDATORY 등이 있습니다.