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
- [JSCODE] 모의면접 스터디 회고 스터디 참여 계기okky를 둘러 보다가 재밌는 스터디 모집 글이 올라 온 것을 확인했다. ‘CS 면접 대비 스터디 모집’이라는 제목이 눈에 들어 왔고 글을 읽어보는데 체계적이고 스터디가 꾸준히 이어와 기수가 존재한 것으로 보였다.모의면접 스터디 과목은 총 4개였으며 아래와 같다.컴퓨터 네트워크 7기데이터베이스 6기운영체제 5기자바 1기나는 이중에서 자바를 선택하였고 자바는 신설된 스터디 같았다. CS 공부를 평소에도 자주 해왔지만 오래된 내용도 있고 정리를 하고도 입밖으로 얘기를 많이 해본적은 없었다.그래서 내 머리속에 있는 자바의 지식도 정리하고 타인에게 말하면서 면접연습을 하기 위해 스터디를 신청했다. 학습 효율성 피라미드를 보면 서로 설명해주면서 학습하는 것이 효과가 좋다는 것을 알 수 있다.아래 ..
- [IntelliJ] git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 목차개요문제의 원인Git의 core.autocrlf 설정추천 방안1. 개요잘 사용하던 IntelliJ 프로젝트 초기 커밋을 하던 중 위와 같은 노란 경고창이 떴다.최근에 업데이트를 진행했었기에 무슨 문제인가 싶었다. 처음엔 안뜨던 warning이 갑자기 떠서 당황스러웠지만, 천천히 읽어보니 Git에서 라인 끝 설정과 관련된 문제를 경고하고 있었다. 이를 이해하고 해결한 방법에 대해 차근차근 알아보자.2. 문제의 원인여러 운영체제에서 작업하다 보면, 같은 프로젝트에서 다른 파일이 CRLF와 LF로 혼용되어 커밋될 수 있다. 이는 팀원 간에 줄 끝 문자로 인해 불필요한 변경이 발생하게 만들거나, 스크립트나 프로그램이 예상치 못한 동작을 하게 만들 수도 있다. CRLF와 LF의 차이CRLF: 윈도우에서는 줄 ..
- JPA를 사용하는 이유가 무엇일까? 목차개요순수 JDBCSQL Mapper(JdbcTemplate, Mybatis)JPA(Java Persitence Api)Jdbc vs SQL Mapper vs JPAJPA가 무조건 좋을까?결론1. 개요현재 많은 개발자들이 JPA를 사용하지만 JPA를 사용하는 이유와 장단점에 대해 정리해보려고 한다.먼저 코드를 통해서 눈에 띄는 차이를 살펴보자.2. 순수 JDBC과거에는 객체를 데이터베이스 저장 하려면 위와 같이 복잡한 JDBC API와 SQL을 한땀 한땀 작성해야 했다.3. SQL Mapper(JdbcTemplate, Mybatis)JdbcTemplate이나 Mybatis 같은 SQL Mapper가 등장하면서 위와 같이 개발 코드가 줄었지만 개발자가 SQL을 작성해야 하는 것은 변하지 않았다.4. JP..
- 트랜잭션 전파 옵션을 이용해서 복구하기 목차개요복구 REQUIRE복구 REQUIRE_NEW복구 REQUIRES_NEW 사용X결론1. 개요회원 가입과 로그를 하나의 트랜잭션으로 묶은 기능이 있다. 이때 이력 로그를 DB에 남기는 작업에 문제가 발생해서 가입 자체가 안되는 경우가 발생한다고 하자.‘회원 가입을 시도한 로그를 남기는데, 실패하더라도 회원 가입은 유지되어야 한다.’이 요구사항을 만족하기 위해 REQUIRES_NEW 옵션을 사용해보자.2. 복구 REQUIRE개발자들이 많이 하는 실수 케이스이다.LogRepository 에서 예외가 발생하면 그것은 MemberService 에서 예외를 잡아서 처리하면 될 것 같다라고 생각한다.그러나 내부 트랜잭션에서 rollbackOnly 를 설정하기 때문에 결과적으로 정상 흐름 처리를 해서 외부 트랜잭..
- 스프링 트랜잭션 전파에 대해 알아보자 목차개요전파 기본외부롤백내부롤백결론1. 개요트랜잭션이 둘 이상 있을때 어떻게 동작하는지 자세히 알아보고, 트랜잭션 전파에 대한 개념을 알아보려고 한다. 트랜잭션을 각각 사용하는 것이 아니라 트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 수행하면 어떻게 될까?기존 트랜잭션이 별도의 트랜잭션을 진행해야 하는지? 아니면 기존 트랜잭션을 그대로 이어 받아서 트랜잭션을 수행해야 하는지? 이런 경우 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation)라 한다.2. 전파 기본외부 트랜잭션이 수행중인데, 내부 트랜잭션이 추가로 수행됨.스프링에서 이 경우 외부 트랜잭션과 내부 트랜잭션을 묶어서 하나의 트랜잭션을 만들어준다. 내부 트랜잭션이 외부 트랜잭션에 참여하는 것이다. 이것은 기본동작이고 옵션을..