전체 글

https://github.com/dhmin5693 dhmin5693@naver.com
· Java/JPA
JPA 사용 시 주의할 점 영속 상태 보장 JPA Entity는 영속상태인가, 아닌가에 따라서 동작 상 제한사항이 있을 수 있다. 예를 들면, 영속 상태의 entity는 delete가 가능하지만 비영속 상태의 entity는 불가능하다. 특정 로직을 수행하는 경우 영속 상태를 인지하고 있어야한다. @Transactional public void deleteQuestion(User loginUser, Question question) throws CannotDeleteException { if (question.isDeleted()) { throw new CannotDeleteException("이미 삭제된 질문입니다."); } if (!question.isOwner(loginUser)) { throw ne..
· Java
ATDD 같이 읽을 만한 자료 https://en.wikipedia.org/wiki/Acceptance_test–driven_development https://martinfowler.com/articles/practical-test-pyramid.html ATDD를 간단하게 소개해보자면... 인수 테스트는 고객과 개발자, 그리고 테스터간의 커뮤니케이션을 기반으로 한 개발 방법론이다. 이러한 프로세스는 개발자와 테스터가 구현 전에 고객의 요구를 이해하는 데 도움이 되며 고객이 자신의 도메인 언어로 대화 할 수 있도록 한다. Trade off of TDD 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다. 아무리 코드가 우아해도, 아무리 가독성이 높아도, 테스트 케이스가 없으면 깨끗하지 않다. 테스트는 코..
AWS 네트워크 구성 VPC (Virtual private cloud) 공식 문서 AWS 상에서 내가 사용할 클라우드 자원의 네트워크를 직접 구성하는 서비스이다. 일반적인 네트워크 망은 수많은 물리적 장비를 직접 설치하고 구성 및 구축까지 해야하지만 VPC는 클라우드 서비스이므로 물리적 장비를 직접 설치할 필요가 없다. 망의 논리적인 구조를 웹 콘솔에서 관리하고 네트워크 정책을 설정할 수 있다. 관련 서비스로는 Subnet, Internet gateway, Route table, Security group 등이 존재한다. VPC 생성 AWS의 VPC 메뉴로 접속하여 생성 버튼을 누른다. 적절한 이름을 생성하고 IP 주소는 CIDR 주소로 입력한다. 미리 정의된 사설 IP 대역(참고)을 활용하여 적절한 C..
CIDR 표기법 사이더(Classless Inter-Domain Routing, CIDR)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법이다. 네트워크를 잘 모르는 사람도 IP 주소가 무엇인지, 그리고 어떻게 생겼는지는 얼추 알고 있는 경우가 많다. CIDR 표기법은 IP 주소에 특별한 의미를 가진 숫자를 더하여 표기한다. (192.168.50.0/24 같은 방식) CIDR을 제대로 이해하기 위해서는 IP 주소와 서브넷마스크에 대한 이해가 선행되어야 한다. IP 주소 네트워크 자산의 논리적인 주소 표기법 0부터 255까지의 숫자를 4개 사용 192.168.0.1 와 같은 방식으로 사용 영역 IP 주소는 Network 영역과 Host 영역을 합쳐서 쓰는 ..
업계의 상반기 동향 개발자라면 상반기 업계 동향에 대해 고민하지 않을 수 없는 시기였다. 이유라면 당연히... 동요하지 않은 사람이 있을까 싶을 정도의 핫이슈가 업계를 강타하고 있었다. 우리 회사도 뒤늦게 동참하였고 다른 회사에 비해 크진 않지만 그래도 기분은 좋을 정도였다. 그래서 내 상반기 회고에 왜 동향이 나오는가 하면... 오랜 이직 준비에 지쳐버린 심신이 이 때를 기점으로 다시 살아났다. 지금 당장 나가지 않더라도 준비하지 않으면 도태될 것만 같은 위기감이 들었다. 그러면서 1월 중순부터 매일 공부를 하는 습관을 들이게 된 것이다. 첫 연속 커밋을 시작한 날은 2021년 1월 15일이었고 몇 번의 실수를 제외하면 매일 꾸준히 커밋을 진행하고 있다. 그러던 중 전사 연봉 일괄 인상안이 발표되면서 ..
Mac에서는 Command + ` 키를 활용하여 활성화된 프로그램 창을 전환할 수 있다. 그러나 IntelliJ 에서는 이게 먹히지 않는다. 일부 키를 바꿔주면 간단하게 고칠 수 있다. command + , 를 눌러 Preferences로 들어간다. Next Project Window에 마우스를 대고 우클릭을 하면 할당된 키 조합인 Command + `를 삭제할 수 있다. 그리고 Activate Next Window에 Command + `를 할당한다. 두 기능의 키 조합을 바꿔주고 나면 창 전환이 잘 되는 것을 확인할 수 있다.
개발을 하다 보면 특정 포트가 겹쳐서 어플리케이션이 에러를 뱉는 경우가 종종 발생하고는 한다. 그럴때 포트를 사용중인지 확실하게 확인하는게 좋다. lsof 명령어는 거의 대부분의 운영체제에서 사용할 수 있다고 하니 이 명령어를 활용해보자. sudo lsof -nP -i4TCP:{PORT} | grep LISTEN {PORT} 대신 8080처럼 확인하고자 하는 포트 번호를 입력하면 된다. 하지만 이 명령어를 매번 치기도 귀찮다. 그럴땐 쉘 스크립트의 function을 활용해보자. port() { sudo lsof -nP -i4TCP:$1 | grep LISTEN } 이 function을 ~/.bashrc나 ~/.zshrc 등 쉘 실행과 동시에 같이 실행되는 파일에 저장한다. port 8080과 같이 입력하..
어플리케이션이 메시지를 얼마나 빠르게 카프카 가져가고 있는지를 측정하고 있었다. kafka를 리눅스 쉘에서 확인하면 current-offset 필드를 확인할 수 있는데, 같은 토픽의 모든 파티션 offset을 더하였다. 그리고 1분 후에 offset을 더한 결과와 비교하는 방식으로 대략적인 분당 트래픽 처리량을 계산하였다. 파티션이 적었을 땐 offset을 일일히 더해줘도 큰 문제가 없었다. 받는 데이터가 많아지면서 파티션을 몇 배나 증설하니 슬슬 수동으로 더하기 귀찮아졌다. offset은 항상 같은 컬럼에 있다는 규칙성이 있으니 한 번의 명령어로 해결하고자 하였다. 아는 명령어를 하나씩 파이프로 이어보고 모르는건 구글링을 해본 결과 아래처럼 입력하여 원하는 결과를 도출할 수 있었다. ls -l | ta..
감동이중요해
티끌모아 산을 쌓아보자