본문 바로가기

반응형

분류 전체보기

(24)
DriverManager는 어떻게 Driver를 찾을까..? 김영한님의 "스프링 DB 1편 - 데이터 접근 핵심 원리" 강의를 듣다가 궁금한 점이 생겼습니다 강의 도중 아래와 같은 동작을 하는 코드를 실행하는데요 import java.sql.Connection; import java.sql.DriverManager; public class Utils { public static Connection getConnection() { try { Connection connection = DriverManager.getConnection(URL, USARNAME, PASSWORD); return connection; } catch (SQLException e) { throw new IllegalStateException(e); } } } 아래와 같이 H2 database..
제조 대기업에서 IT 대기업으로 이직 제조 대기업 임베디드 개발자로 2년간 일하다가 IT 대기업 백엔드 개발자로 이직해서 경험한 것들을 공유하려고 해요. 저는 전직장의 경험을 살리기 어려운 상황이어서 현직장에는 신입 처우로 입사했습니다. 물론 다른 회사의 백엔드 개발 포지션에 경력을 인정받고 합격해서 오퍼레터 수락, 입사 확정까지 했었지만.. 당장의 연봉보다는 더 성장할 수 있는 선택지가 무엇인지 고민하고 고르게 되었습니다. 개발이라는 큰 직무 안에서 이직했지만 경험을 살리기 어려웠던 이유는 사용하는 기술과 경험할 수 있는 업무가 상당히 많이 다르기 때문입니다. (개인적인 생각이며 저도 오퍼까지 받았듯이 충분히 경력을 살릴 수 있습니다) 현직장과 전직장에서 직무가 달라서 크게 의미는 없겠지만 제가 경험한 기술스택과 업무를 간단히 살펴보겠습니..
정적 팩터리 메서드는 생성자보다 좋을까? Java 에서 클래스의 객체 인스턴스를 생성하는 방법에는 여러가지가 있지만 가장 기본적으로 쓰이는 방법은 생성자와 new 키워드로 인스턴스를 할당하는 방법이 있습니다 그런데 상황에 따라 파라미터의 종류나 갯수가 다를 때에는 어떻게할까요? 생성자를 그냥 여러개 만들면 될까요? 이런 상황에서 좋은 방법이 정적 팩터리 메서드인데요 정적 팩터리 메서드는 생성자보다 어떤 점이 좋을까요? 생성자는 무조건 클래스와 이름이 같아야하지만 그 외 메서드는 그럴 필요가 없습니다. 정적 팩터리 메서드를 활용하면 메서드에 이름을 따로 부여할 수 있어서 반환될 객체의 특성을 코드를 살펴보지 않고도 이름으로 설명할 수 있습니다. 생성자는 호출될 때마다 무조건 새로운 객체 인스턴스를 할당하지만 static 메서드는 그럴 필요가 없습..
Spring - 중복 타입으로 자동주입 Spring 에서는 @Autowired를 통해서 혹은 유일한 생성자로 의존성 주입을 할 수 있습니다. @Autowired는 기본적으로 타입으로 빈을 조회하는데 같은 타입의 빈이 2개 이상 컨테이너에 등록되어있을 때는 어떻게 할까요? 코드로 보자면 아래와 같은 상황입니다. @Component public class FixDiscountPolicy implements DiscountPolicy { } @Component public class RateDiscountPolicy implements DiscountPolicy { } @Component public class OrderServiceImpl implements OrderService { private final DiscountPolicy disco..
406 Not Acceptable HttpMediaTypeNotAcceptableException Spring Boot 기반 프로젝트를 하면서 406 에러를 만났었습니다 별거 안했는데 왜 406 에러를 Response 했을까요..?? 평범한 요청인데 406 Error Response 를 하고 있습니다 에러의 내용을 찍어보고자 ExceptionHandler 를 만들어서 ex.printStackTrace() 메서드를 호출했습니다 @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = HttpMediaTypeNotAcceptableException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseDto handleHttpMedia..
Spring AOP (Aspect Oriented Programming) Spring을 공부하면서 AOP가 무엇인지 간단하게 알아봤습니다 구글에 AOP를 검색하면 이런 이미지를 볼 수 있습니다 이미지를 봐도 알 수 있듯이 클래스마다 비슷한 부분들이 있고 그 비슷한 부분들을 묶는 개념이라는 걸 알 수 있죠. 다수의 클래스에 같은 기능을 횡단으로 적용하는 것입니다. 무슨 말인지 잘 모르겠으니 바로 예제를 살펴보겠습니다 먼저, 간단한 Controller를 만들겠습니다 package com.zziri.test.controller; // import ... @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/aop") public String aop(@RequestParam String p..
Checked vs Unchecked Exception checked 와 unchecked exception 에 대해서 간단하게 정리해보겠습니다. 우선, Exception은 Error와 구분되는데요. Error는 시스템 레벨에서 발생하는 심각한 오류를 말하고, 예측할 수 없으며 App에서 오류에 대한 처리를 할 수도 없고 할 필요도 없습니다. 반면에 Exception은 프로그래머가 구현한 로직에서 발생하는 오류입니다. 당연히 미리 예측도 가능하고 처리를 하는 것이 좋죠. Error는 개발자가 처리할 수 없으니, Exception에 집중하겠습니다. Exception은 checked와 unchecked 두 가지로 크게 나눕니다. 두 Exception을 비교해보면,,, Unchecked Exception RuntimeException을 상속 예외처리를 하지 않아도..
Task - MySQL SSL Error (com.mysql.cj.jdbc.exceptions.CommunicationsException) 바보(?)가 되지 않기 위해서 시작한 Task App 개발 프로젝트를 시작하고 이제 아주아주 간단한 기능들은 구현이 되어서 API 배포를 해봤어요. API 배포 과정에서 발생했던 별거 아닌 이슈에 대해 트러블 슈팅한 내용을 기록하는 포스팅입니다. 우선 AWS EC2 인스턴스를 Ubuntu 18.04 로 생성했습니다. Database 사용을 위해서 MariaDB로 RDS 인스턴스도 생성했죠. 그리고 git clone 후 H2 Database 사용한 경우는 정상적으로 작동되었습니다. 그런데 RDS와 통신하여 동작하도록 세팅하면 Exception이 발생했습니다,,, $ sudo ./gradlew build -x test Starting a Gradle Daemon, 1 busy Daemon could not ..

반응형