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..
2023.03.21
-
테이블마다 id 칼럼을 PK로 사용한 이유는 무엇일까?
목차개요설계 테이블사용한 이유와 장점결론1. 개요프로젝트 테이블을 설계하고 리뷰를 받는중 아래와 같은 질문을 받았다.Q) 각각의 테이블에 auto increment 되는 id 칼럼을 사용한 이유와 했을때의 장점이 무엇인가요?A) 어,,, 엄,,, 관용적으로 많이 사용해서 자연스럽게 id를 PK로 사용했습니다. 질문을 받은 나는 대답을 제대로 하지 못하였고 테이블을 왜그렇게 설계했는지보단 관용적으로 이렇게 많이들 사용한다고 해서 자연스럽게 테이블을 설계했던 것이었다. '설계를 왜 이렇게 했는가?' 에 대해서 고민하고 설계를 해야 하는데 이번을 계기로 많은 사람들이 왜 id칼럼을 auto increment가 되는 칼럼으로 사용했을때 장점에 대해 정리를 해보려고 한다.2. 설계 테이블내가 설계한 테이블은 위와..
2024.02.14
-
[TroubleShooting] 메모리 중요정보 노출 취약점 개선방안
목차개요취약점 파악개선방안결론1. 개요안드로이드 업무에서 보안점검을 받던 중, 앱에서 중요정보가 메모리에 남는다는 취약점이 발견되었다. 중요 정보는 `신분증 이미지`였는데, 서버로 데이터를 전달하고 사용하지 않기 때문에, 가비지 컬렉션의 대상으로 GC가 일어나면 사라질 정보였었다. 하지만, GC가 언제 일어 날지 모를뿐더러, 이런 민감정보(신분증 이미지 뿐만 아니라 계좌정보나 고객의 연락처 등 개인정보)를 사용함에 있어서 주의가 항상 필요했다. 내가 맡은 애플리케이션은 금융앱이라 난독화나 여러가지 보안 솔루션이 있지만, 안심해서는 안된다. 이런 중요 정보들은 사용하지 않는다면, 메모리에 남아 있지 않도록 보호하는 것이 중요하다.어떤 문제점이 있었고 해결은 어떻게 했는지 작성해보려고 한다.2. 취약점 파악..
2024.03.07
New
-
좋아요 수를 이용해 동시성 처리 비교하기
목차개요좋아요 설계좋아요 수 설계동시성 문제비관적 락(Pessimistic Lock) 낙관적 락(Optimistic Lock)비관적 락(Pessimistic Lock) vs 낙관적 락(Optimistic Lock)결론1. 개요좋아요 기능을 구현하면서 마주할 수 있는 문제들과 상황을 정리해보려고 한다.특히, 좋아요 기능뿐만 아니라 데이터의 무결성을 보장하기 위해 동시성 처리를 어떻게 해야할지는 중요한 과제인데 이번 정리를 통해 차근차근 알아보자.2. 좋아요 설계기본적인 요구사항은 다음과 같다.각 사용자는 게시글마다 좋아요를 누를 수 있다.좋아요를 했다면 취소도 가능하다.idPKpost_id게시글 아이디user_id사용자 아이디created생성일시좋아요는 별도 테이블로 관리되며 post_id와 user_id..
2025.03.09
-
댓글 알고리즘으로 무한 depth 구현하기
목차개요최대 2depth 댓글댓글 생성 삭제댓글 목록 조회무한 depth 댓글댓글 생성 삭제댓글 목록 조회결론1. 개요처음에는 최대 2depth의 대댓글을 구현하고 이후 추가적으로 무한 depth의 대댓글을 구현해보았다.depth가 늘어날수록 계층 구조를 효율적으로 관리하고 성능, 댓글 정렬등 고려해야 할 상황이 많다.아래 어떤 알고리즘을 사용했고 구현했는지 차근차근 정리를 해보았다. 2. 최대 2depth 댓글2-1. 댓글 생성 삭제기본적인 요구사항은 다음과 같다.계층별로 오래된순으로 정렬을 한다.하위 댓글이 모두 삭제되어야 상위 댓글을 삭제할 수 있다.하위 댓글이 X, 댓글 즉시 삭제하위 댓글이 O, 댓글 삭제 표시여기서 댓글 2를 삭제하게 돠면 아래와 같다.댓글2 하위 계층에 댓글5가 존재하기 때문..
2025.02.20
-
Github Actions으로 Sonar Cloud와 Slack 알림 설정하기
목차개요시나리오 소개사전 작업 구성워크플로우 구성마치며1. 개요Github Actions를 이용하여 CI/CD 파이프라인 구성에 대한 이해를 해보려고 한다.Github Actions는 Github 레포지토리를 이용해 간단하게 설정하고 사용하기 쉽다. 별도의 서버나 외부서비스를 구축할 필요 없이 Github에서 제공하는 기능으로 CI를 실행할 수 있기에 Github Actions를 선택하였다.2. 시나리오 소개요구사항특정 path 에 대해서만 실행 (multi-board에 src/**)main branch로 PR이 생성 & 동기화 될 때 테스트 작업 실행 (CI)PR이 main으로 merge 되면 배포 (CD)배포 성공 여부 슬랙으로 전송위에 요구사항을 반영한 대략적인 플로우는 다음과 같다.main bra..
2025.01.23
-
운영환경에서 안전하게 테이블 칼럼을 추가하려면 어떤 방법이 좋을까?
목차개요한 번에 처리하는 방법왜 3단계로 나눠서 작업해야 할까?결론1. 개요진행하고 있는 프로젝트는 게시판 프로젝트인데, 한 번에 생각으로 설계하고 만드는 것이 아닌 요구사항이 추가된다고 생각하고 점진적인 게시판을 만드는 프로젝트이다. 기본적인 게시판에 필요한 API를 만들었고 해당 테이블의 칼럼은 아래와 같다. post 테이블의 식별자인 id, 제목인 title, 내용인 content 만 가지고 있었다. 근데 클라이언트 측에서 조회 수 기능이 있으면 좋겠다고 하면서 요구사항을 던져주셨다. Client : “post 테이블에 조회수 칼럼 넣어주세요~”Server : “네~”Server : 뚜따뚜따 “ALTER TABLE post ADD COLUMN view_count”Server : “반영했습니다~”C..
2025.01.12
-
2024년 개인 회고
올 한해는 내가 했던 결정들에 대해 다시 되돌아 보는 일이 많았다.0. 퇴사2023년 12월말 다니던 회사에 희망퇴직을 했고 1년이 지났다.퇴사 직후, 2024년의 시작은 고민과 설렘이 함께 공존했다. “개발자로써 지금 잘하고 있는 걸까?”“퇴사를 선택한 것은 좋은 선택이었을까?”“올해는 내 자신이 더 성장할 수 있을까?”등등..1. 생활여행여러가지 복합적인 생각을 하며 1월에 제주도로 계획없이 여행을 떠났다.제주도 가면서 저가비행 위주로 탑승하였고 이번에 처음으로 아시아나를 타봤는데 확실히 달랐다. 앞 의자에 스크린이 있었고, 비행시간이 짧은데도 쥬스를 챙겨주었다. 제주도 비행하면서 쥬스를 처음 먹어봤다..(진에어, 티웨이, 제주항공 등등.. 제주도가면서 쥬스를 먹은적이…?)제주도에 도착하자 먹으러 갔..
2025.01.03