전체 글

전체 글

    Monster Sanctuary(몬스터 성역) 클리어 후 공략

    추석 중에 굉장히 재밌게 한 게임을 리뷰하려고 한다. 게임은 한글화 되어있지만 한글화가 2022년 상반기에 나와서 그런지 한글로 된 공략본이 많지 않고 어려움을 느끼는 사람들을 위한 간단한 팁. 마커 표시 & 전투 속도 3배 이 게임은 마커 표시를 무조건 하고 다녀야된다. 나중에 와야할 곳이라면 무조건 마크 표시를 하고 다니는 것을 추천. 안하고 다니면 중간 중간 스토리 전개를 어디서부터 해야될지 길을 잃을 수도 있다. 설정창에서 전투 속도를 3배로 맞추자. 첫 전투만 해도 얼마나 답답한지 느껴진다. 기술은 원하는 대로 올려도 된다. 이 게임의 유일한 진입 장벽이라함은 각 몬스터들의 스킬 조합 운용이다. 그래서 무슨 팀이 좋은지 무슨 기술이 좋은지 고민하게 되는데 기술만큼은 뭐 찍을지 고민 안해도 된다...

    다이나믹 쿼리 사용 시 간과할 수 있는 개인정보 유출 문제(Feat. iBatis, myBatis, QueryDsl)

    최근 회사에서 개인정보 유출 이슈가 발생했다. 해당 이슈 사항은 굉장히 큰 부분이라 전사적으로 뒤집어진 사건이었고(자세한건 잡혀갈까봐 말을 못하고) 원인은 너무 사소한 곳에 있던 문제였다. 원인은 다이나믹 쿼리 사용 시 개인정보에 관한 컬럼에 조건문을 사용했기 때문이다. iBatis AND CUST_ID = #custId# myBatis AND CUST_ID = #{custId} custId는 고객 ID에 관한 컬럼이다. iBatis, myBatis를 사용한다면 위와 같은 코드를 많이 마주치게 될 것이다. 위의 코드는 문제가 있는 코드다. 의외로 위와 같은 코드는 아래와 같은 생각으로 쉽게 발생할 수 있다. 매개변수가 매번 달라지니 다이나믹 쿼리를 사용하자. 근데 하나하나 쓰기 귀찮으니 다른데서 복사해서..

    Static Method를 테스트 하기 어려운 이유

    예제 코드 public class RepositoryRank { interface GithubService { GitHub connect() throws IOException; } class DefaultTestService implements GithubService { @Overridwe public Github connect() throws IOException { return Github.connect(); } } ---------------------------------------- private GithubService gitHubService; public RepositoryRank(GithubService gitHubService){ this.gitHubService = gitHubSer..

    [Item 9] try-finally보다는 try-with-resources를 사용하라

    Stream, DB Connection, File 등 외부 자원을 이용하는 것들은 해당 자원을 쓰고나면 반납하는 차원에서 close(); 명령어를 써줘야 한다. try-finally 방식 FileInputStream file = null; try { file = new FileInputStream("file.txt"); //파일 로직 }finally{ file.close(); } try-with-resources 방식 try(FileInputStream file = new FileInputStream("file.txt")){ //file 로직 } 자동으로 close 처리를 해준다. 코드가 깔끔해진다는 장점이 있다. 예외 메시지가 더 정확해진다. close 과정에서 예외가 발생해도 try 블록에서 발생한 ..