분류 전체보기
-
[Java] Checked Exception vs Unchecked Exception 정리Language/Java 2021. 6. 28. 11:34
체크 예외와 언체크 예외(Checked, Unchecked Exception) 자바의 예외는 크게 3가지로 나눌 수 있습니다. 체크 예외(Checked Exception) 에러(Error) 언체크 예외(Unchecked Exception) 자바에서 에러, 예외 관련된 클래스들의 계층구조는 위와 같습니다. Throwable 클래스를 기준으로 Error, Exception 클래스로 나뉘어집니다. 왼쪽에 보이는 Error는 말 그대로 에러와 관련된 클래스입니다. 그리고 오른쪽에 보이는 Exception 도 말 그대로 예외와 관련된 클래스입니다. 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception) 두 가지로 구분하였습니다. 에러(Error)란? 에러는..
-
[Spring] Spring Security와 Swagger 같이 사용하는 법Server/Spring Boot 2021. 6. 27. 20:13
Spring Security Swagger 에러 해결 이번 글에서는 Spring Boot에서 Security와 Swagger를 사용하면서 만난 문제를 해결한 과정에 대해서 정리해보려 합니다. 프로젝트를 진행하면서 특정 URI로 시작하는 것이 아니라면 시큐리티 단에서 걸러내는 작업을 해보고 싶어서 Spring Security를 아주 간단하게만 적용을 해보고자 하였습니다. 하지만 적용을 하다 보니.. Swagger 관련해서 문제점이 생겼는데요. 그 부분에 대해서 간단하게 정리해보겠습니다. Spring Security는 어떻게 적용했을까? 처음에는 Spring Security는 비밀번호 단방향 암호화를 하는데만 사용했기 때문에 위의 설정정도로만 아주 간단하게 했습니다. 그래서 위와 같이 /api/v2로 시작하..
-
[MySQL] Inner JOIN과 Outer JOIN의 차이가 무엇일까?Book/Real MySQL 2021. 6. 25. 15:35
JOIN 정리하기 이번 글에서는 JOIN에 대해서 알아보겠습니다. (JOIN에 대해서는 아는데 INNER, OUTER 용어가 헷갈려서.. 정리를 해보려 합니다.) JOIN의 종류 JOIN의 종류는 크게 INNER JOIN과 OUTER JOIN으로 구분할 수 있고, OUTER JOIN은 다시 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분할 수 있습니다. 조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하며, 그에 따라 처리할 작업량이 상당히 달라집니다. INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로 MySQL 옵티마이저가 JOIN의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있습니다. 하지만 OU..
-
[AWS] Load-Balancer, CodeDeploy, Docker로 CI/CD 하기Cloud/AWS 2021. 6. 17. 16:57
Docker, CodeDeploy, Load-Balancer로 무중단 배포하기 이번 글에서는 현재 진행하고 있는 프로젝트 에서 무중단 자동화 배포를 하는 과정에 대해서 정리를 해보겠습니다. 대신 EC2 생성(jar 배포) 등등 세세한 부분까지 다루지는 않고 큰 부분들만 다루어보겠습니다. (그래서 이 글은 따라하면서 보기는 애매할 수 있어 실습을 해보고 싶다면 제 블로그 다른 AWS 관련 글 들을 많이 참고해주세요. 이 글은 그냥 이렇게 했구나 하고 보기만 하는!) 프로젝트 전체의 아키텍쳐는 위와 같습니다. 이 중에서 Docker, Load-Balancer, CodeDeploy로 어떻게 무중단 배포를 하였는지에 대해서만 알아보겠습니다. (Jenkins 관련 설정을 다루지 않습니다.) 간단하게 프로젝트 배포..
-
[Spring] yml 파일 dev, prod, local 환경으로 간단하게 분리하기Server/Spring Boot 2021. 6. 16. 17:52
application.yml dev, prod, local 환경 분리하는 법 이번에 프로젝트를 진행하면서 마무리가 되었을 쯤에 개발, 운영, 로컬 환경으로 분리시키는 작업이 필요했습니다. 그래서 이번 글에서 application.yml을 사용할 때 prod, dev, local로 나눠서 작업하는 법에 대해서 간단하게 알아보겠습니다. 하나의 yml 파일 내에서 ---을 통해서 구분하는 것도 가능하지만 yml 파일이 거대해지다 보니.. 위 처럼 환경마다 파일을 만들어서 총 4개의 yml 파일을 생성하였습니다. application.yml을 보면 위와 같이 맨 위에 공통으로 쓰이는 설정 값들을 놓고, ---을 구분 후에 아래의 prod, dev, local 환경을 분리했습니다. profile 값에 맞는 설정 ..
-
[MyBatis] MyBatis foreach INSERT 성능 테스트 해보기Server/MyBatis 2021. 5. 27. 15:26
MyBatis INSERT 쿼리 성능 테스트 MyBatis에는 foreach 라는 것을 이용해서 Batch Insert를 할 수 있는 기능을 제공해줍니다. 그런데 문득 foreach를 통해서 데이터를 INSERT 하는 것과 한 건씩 여러번 INSERT 하는 성능 차이가 얼마나 날까? 하는 의문점이 생겨 한번 글을 정리해보려 합니다. 당연히 성능은 foreach를 쓰는 것이 빠를 것인데요. 그럼에도 대략이라도 얼마나 차이나는지 한번 알아보겠습니다. 일반 INSERT 쿼리 먼저 위와 같이 for 문을 10000번 반복해서 데이터를 INSERT 해보겠습니다. 누가봐도 비효율적.. 말이 안되는 코드지만 그럼에도 몇초나 걸리는지 한번 실행해보았습니다. 실행해보니 예상했던대로 꽤나 시간이 걸렸는데요. 결과는 아래와..
-
[Java] 자바에서 Generic 이란 무엇일까?Language/Java 2021. 5. 25. 11:16
제네릭(Generic)이란? 자바의 제네릭(Generic)은 형 변환시에 발생할 수 있는 문제들을 사전에 없애기 위해서 만든 것입니다. 아직은 어떤 말인지 와닿지 않을 수 있습니다. 바로 예제 코드를 보면서 제네릭에 대해서 알아보겠습니다. public class CastingDTO { private Object object; public void setObject(Object object) { this.object = object; } public Object getObject() { return object; } } public class GenericSample { public static void main(String[] args) { GenericSample sample = new GenericS..
-
[MySQL] 트랜잭션 고립 레벨이란 무엇일까?Book/Real MySQL 2021. 5. 25. 10:44
MySQL에서의 트랜잭션 MySQL의 동시성에 영향을 미치는 잠금(Lock), 트랜잭션, 그리고 트랜잭션의 격리 수준을 살펴보겠습니다. 트랜잭션은 작업의 완전성을 보장해 주는 것입니다. 잠금: 트랜잭션은 서로 비슷한 개념 같지만 사실 잠금은 동시성을 제어하기 위한 기능입니다. 트랜잭션: 데이터의 정합성을 보장하기 위한 기능입니다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨 MySQL의 격리 수준 트랜잭션의 격리 수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션..