Hot
-
System.out.println 메소드는 실무에서 `절대 사용하지마라.` 목차개요System.out.println 무엇인가?왜 사용해서는 안되는가?로그를 남기면 안되는 것인가?결론1. 개요프로그래밍을 처음 접하면 System.out.println(”Hello World”);같이 콘솔에 출력하는 것을 배우게 된다. 아마 모든 개발자들은 검정바탕에 'Hello World'를 다 알 것이라 생각한다. 우리는 기능 구현을 하면 원하는 값이 제대로 나오는지 확인하기 위해 출력을 하는 경우 종종 사용한다. 그러나, 실무에서 System.out.println을 절대 사용을 하면 안된다. 그 이유를 아래에서 차근차근 알아보자.2. System.out.println 무엇인가?System.out.println은 Java개발할때 디버깅 용도로 콘솔에 출력하는 메소드 중 하나다.System은 j..
-
테이블마다 id 칼럼을 PK로 사용한 이유는 무엇일까? 목차개요설계 테이블사용한 이유와 장점결론1. 개요프로젝트 테이블을 설계하고 리뷰를 받는중 아래와 같은 질문을 받았다.Q) 각각의 테이블에 auto increment 되는 id 칼럼을 사용한 이유와 했을때의 장점이 무엇인가요?A) 어,,, 엄,,, 관용적으로 많이 사용해서 자연스럽게 id를 PK로 사용했습니다. 질문을 받은 나는 대답을 제대로 하지 못하였고 테이블을 왜그렇게 설계했는지보단 관용적으로 이렇게 많이들 사용한다고 해서 자연스럽게 테이블을 설계했던 것이었다. '설계를 왜 이렇게 했는가?' 에 대해서 고민하고 설계를 해야 하는데 이번을 계기로 많은 사람들이 왜 id칼럼을 auto increment가 되는 칼럼으로 사용했을때 장점에 대해 정리를 해보려고 한다.2. 설계 테이블내가 설계한 테이블은 위와..
-
[TroubleShooting] 메모리 중요정보 노출 취약점 개선방안 목차개요취약점 파악개선방안결론1. 개요안드로이드 업무에서 보안점검을 받던 중, 앱에서 중요정보가 메모리에 남는다는 취약점이 발견되었다. 중요 정보는 `신분증 이미지`였는데, 서버로 데이터를 전달하고 사용하지 않기 때문에, 가비지 컬렉션의 대상으로 GC가 일어나면 사라질 정보였었다. 하지만, GC가 언제 일어 날지 모를뿐더러, 이런 민감정보(신분증 이미지 뿐만 아니라 계좌정보나 고객의 연락처 등 개인정보)를 사용함에 있어서 주의가 항상 필요했다. 내가 맡은 애플리케이션은 금융앱이라 난독화나 여러가지 보안 솔루션이 있지만, 안심해서는 안된다. 이런 중요 정보들은 사용하지 않는다면, 메모리에 남아 있지 않도록 보호하는 것이 중요하다.어떤 문제점이 있었고 해결은 어떻게 했는지 작성해보려고 한다.2. 취약점 파악..
New
-
같은 패키지에 있는데 왜 못읽지? JsonUtils.read() 의 비밀 목차개요삽질의 여정첫 번째 가설 : 파일 경로가 틀렸나?두 번째 가설: 코드 문제?Eclipse vs IntelliJ 빌드 방식 차이 Eclipse 의 자동 복사 기능왜 IntelliJ와 차이가 있는가?해결 방법가장 확실한 방법: resources 폴더 사용Gradle 프로젝트 설정결론1. 개요테스트 코드를 살펴보던 중 이상한 일이 발생하였다. 분명 테스트 코드에 작성된 같은 패키지에 request_1.json 파일을 두었는데, 계속 NullPointerException이 발생하는 것이다.String requestDto = JsonUtils.read( ReportCreateServiceTest.class, "request_1.json"); // NullPointerException 발생! ?.. -
장애 전파를 방지하기 위한 Circuitbreaker로 조회수 백업시스템 만들기 목차개요조회수 설계Circuit breaker주의 할 점그렇다면 어떻게 적용하는 것이 좋을까?더 나아가기1. 개요프로젝트를 진행하면서 각각의 게시글에 대한 조회수를 어떻게 처리할까 고민을 하였다.게시글 중 인기 게시글의 경우 조회수를 Database로 올리게 된다면, DB의 부하가 심해질거를 예상하여 Redis 캐시를 도입하였다.이때 운영중인 Redis에 장애가 생긴다면 조회 요청이 실패할 뿐 아니라 지연된 응답으로 다른 서비스들에게도 영향을 미칠 수 있다.2. 조회수 설계게시글의 댓글, 좋아요 수의 경우 관계형 데이터베이스를 사용해 데이터의 일관성을 지키고 안전한 저장소에 영구적으로 저장했다. → 하지만 디스크 접근 비용과 트랜잭션 관리 비용이 크다. 반면, 조회수는 데이터 일관성이 덜 중요하고 트랜잭..
-
비밀번호 재설정링크로 이메일 전송 기능 구현하기 목차개요비밀번호 찾기 설계토큰 설계 (Redis vs DB)구현결론1. 개요이메일이나 SNS 계정 로그인 같은 방식이 현재는 많이 대중화되어 있지만, 아직도 많은 서비스가 자체 계정 시스템을 사용하고 있으며, 사용자는 종종 비밀번호를 잊어버린다.이때 재설정 기능이 없다면 사용자는 로그인을 포기하거나 서비스를 이탈할 확률이 있다.비밀번호 재설정 기능은 다양한 사이트에서 여러가지 제안을 제시한다.그 중 제 프로젝트의 경우 이메일을 이용해 ID를 만들기 있으므로 이메일인증을 통해 재설정 하는 기능을 만들어보려고 한다.2. 비밀번호 찾기 설계사용자가 이메일 입력 후 비밀번호 재설정 요청서버가 1회용 토큰을 생성해 저장토큰이 포함된 재설정 링크를 이메일로 발송사용자가 링크 클릭 → 새 비밀번호 입력 화면으로 이동..
-
단축 URL을 사용하는 이유는 무엇이고 구현해보자 목차개요나의 경험그래서 단축 URL에 장점이 뭔데?구현하기구현하기 1차구현하기 2차구현하기 3차CASE 별 성능 비교하기결론1. 개요프로젝트를 진행하면서 게시글 공유하기 기능을 구현하던 중 단축 URL에 대한 이야기가 나왔다. 평소 유튜브나 네이버 블로그 등 공유하기 버튼을 누르면 길었던 URL 구조가 단축된 경우를 볼 수 있을 것이다.평소에는 그냥 가볍게 지나왔는데 이번 프로젝트를 통해서 단축 URL을 왜 사용하고 구현하는 방법에 대해서 차근차근 정리해보려고 한다.레츠고~2. 나의 경험먼저 나는 카카오톡 같이 URL 링크를 친구들과 대화방에서 주고 받을때 경험을 해봤다. 보통 PC 주소를 그대로 복사해서 전달할때 아래 쿠팡 링크 같이 길게 전달되는 경우가 종종 있었다. 그래서 카톡 대화창이 길어지면 아..
-
좋아요 수를 이용해 동시성 처리 비교하기 목차개요좋아요 설계좋아요 수 설계동시성 문제비관적 락(Pessimistic Lock) 낙관적 락(Optimistic Lock)비관적 락(Pessimistic Lock) vs 낙관적 락(Optimistic Lock)결론1. 개요좋아요 기능을 구현하면서 마주할 수 있는 문제들과 상황을 정리해보려고 한다.특히, 좋아요 기능뿐만 아니라 데이터의 무결성을 보장하기 위해 동시성 처리를 어떻게 해야할지는 중요한 과제인데 이번 정리를 통해 차근차근 알아보자.2. 좋아요 설계기본적인 요구사항은 다음과 같다.각 사용자는 게시글마다 좋아요를 누를 수 있다.좋아요를 했다면 취소도 가능하다.idPKpost_id게시글 아이디user_id사용자 아이디created생성일시좋아요는 별도 테이블로 관리되며 post_id와 user_id..