java (72) 썸네일형 리스트형 [SpringBoot] Logging - 1 (JCL, Slf4j, logback, log4j, log4j2) 1. Spring logging 예전의 Spring 은 JCL (Jakarta Commons Logging) 을 사용하여 로깅을 구현하였다. JCL 은 인터페이스 형태로 되어 있는데, 이를 구현한 구현체를 사용하여 여러 로깅 구현체로 교체하면서 사용할 수 있다. JCL 의 구현체는 Configuration 을 통해서 설정할 수 있는데, JCL 이 구현체를 선택하는 시점은 컴파일 시점이 아닌 런타임 시점이다. 그렇기 때문에 JCL 은 클래스 로더에 의존적인 방식으로 로깅 구현체를 찾게된다. JCL 은 클래스 로더를 통해 컴파일 시점에 로깅 구현체를 찾는 방식에서 가비지 컬렉션이 제대로 작동하지 않는 문제가 발생한다. 이러한 문제를 해결하기 위해 클래스 로더 대신에 컴파일 시점에 구현체를 선택하는 방식으로 .. [SpringBoot] Database 연동 - 3 (JdbcTemplate) 1. JdbcTemplate Spring 에는 Database 를 사용할 수 있는 방법으로 JdbcTemplate 이 있다. 순수 JDBC 에서는 DB Connection 을 얻고 해제하는 등의 DB 작업을 위해 반복되는 코드들이 있다. JdbcTemplate 은 이러한 반복 코드들을 제거할 수 있도록 되어서 사용에 편리하고 자원을 얻고 해제하는 등의 코드를 작성하면서 발생할 수 있는 문제들을 피할 수 있도록 해준다. 물론 SQL 쿼리문은 직접 작성하여야 한다. JdbcTemplate 은 사용할 때 설정은 앞서 JDBC 를 사용하기 위해서 했던 Spring Datasource 등의 설정과 동일하게 수행하면 된다. 2. 구현 JdbcTemplate 으로 구현 시에는 기존의 JDBC 와는 다르게 Connec.. [SpringBoot] Database 연동 - 2 (JDBC) 1. JDBC - JDBC 란? JDBC 는 Java Database Connectivity 의 줄임말로, DB 에 접근할 수 있도록 자바에서 제공하는 자바 표준 SQL 인터페이스 API 이다. 다양한 종류의 RDBMS 에 접속하고 SQL 문을 수행하여 처리하는 작업을 할 때 사용된다. JDBC 를 통한 자바 애플리케이션과 DB 의 구조는 다음과 같다. 자바 애플리케이션 - JDBC API - JDBC Driver - Database JDBC 는 인터페이스 API 이기 때문에, 각 DBMS 에 맞는 JDBC 드라이버를 설정해주어야 한다. JDBC 드라이버는 실제 DBMS 와 통신을 수행하는 자바 클래스로 jar 파일로 제공됩니다. JDBC 드라이버는 DBMS url 과 계정 정보 등을 입력받아서 DB 연.. [SpringBoot] Database 연동 - 1 (DataSource, h2 database) 1. DataSource DataSource 는 실제 물리적인 database 들과의 연결을 위한 팩토리이다. DriverManager 클래스의 대체제로 username, password 과 URL 을 사용하여 database 와 연결합니다. DataSource 를 통해서 Connection 객체와 connection pooling, distributed transactions 등의 기능을 사용할 수 있습니다. - Configuring a DataSource DataSource 를 사용하기 위해서 먼저 build.gradle 파일의 의존성에 jdbc 라이브러리를 추가한다. 만약 maven 을 사용한다면 pom.xml 의 dependency 에 추가하면 된다. implementation 'org.sprin.. [JAVA] 자바 Thread-safe 자바에서는 성능의 향상을 위하여 멀티 스레드 기능을 제공한다. 하지만 멀티 스레드 환경에서 개발을 하다보면 의도했던 결과가 나오지 않는 경우가 있다. 주로 여러 스레드가 하나의 자원에 동시에 접근하면서 발생하는 문제이다. 이러한 문제들을 해결하기 위하여 자바에서는 여러 기능들을 제공하는데, 이러한 기능들을 사용하여 멀티 스레드 환경에서의 실행에 문제가 없도록 프로그래밍한 프로그램을 thread-safe 하다고 한다. 1. synchronized (암시적 lock 사용) 자바에서 thread-safe 하게 구현하는 가장 간단한 방법은 synchronized 키워드를 사용하는 것이다. thread-safe 하게 동작하게 하고 싶은 메서드 또는 블럭을 지정하여서 synchronized 키워드와 함께 선언하여 .. [Spring] Swagger 3.0.0 적용 1. Swagger 란? Swagger 는 간편하게 API Spec 문서를 자동으로 작성하고 이를 편집하여, 화면에 출력할 수 있게 해주는 기능 들을 제공하는 오픈 소스 툴이다. 서버의 API 리스트를 문서화하여 화면에 출력하여 보여주고, 파라미터를 직접 입력하여 API 테스트도 수행할 수 있다. RESTful 하게 구현한 SpringBoot 에도 Swagger 를 적용하여 REST api 들의 문서화와 테스트를 수행할 수 있다. 아래의 예제에서는 Swagger 3.0.0 을 사용하여 Swagger 를 적용하였다. 2. Swagger 설정 Swagger 를 SprintBoot 에 적용하기 위해서는 우선 build.gradle 에 의존성을 추가해주어야 한다. implementation 'io.springf.. [JAVA] 메서드 참조 (::) 1. 자바 메서드 참조 (Java Method Reference) 자바 메서드 참조는 자바 8 버전부터 지원해주는 기능으로 람다식에서 메서드를 참조하여 사용하여 보다 간단하게 표현할 수 있도록 해준다. 사용 방법은 '::' 기호를 사용하여 [클래스명]::[메서드명] 과 같이 사용한다. 스태틱 메서드의 경우 인스턴스 대신 클래스 이름으로 사용할 수 있다. 2. 메서드 참조 형식 메서드 참조는 사용하는 패턴에 따라 다음의 3가지로 구분된다. - static method reference - instance method reference - constructor reference - static method reference static method reference는 클래스의 static method 를 메.. [JAVA] 쓰레드의 동기화 멀티 쓰레드 프로그램에서는 프로세스의 자원을 여러 쓰레드가 공유한다. 그렇기 때문에 각각의 작업이 다른 작업에게 영향을 끼치게 된다. 이러한 경우 공유 데이터의 변경으로 인해 개발자가 의도했던 결과가 나오지 않을 수 있다. 이러한 문제를 해결하기 위해서 임계영역 (critical section) 과 락 (lock) 개념을 도입하여 한 쓰레드가 작업을 종료할 때까지 다른 쓰레드에게 방해받지 않도록 한다. 공유 데이터를 임계영역으로 지정해놓고, 해당 영역의 lock 을 획득한 쓰레드만이 공유 데이터를 사용할 수 있도록 하여 문제를 해결한다. 이처럼 한 쓰레드가 진행 중인 다른 쓰레드를 방해하지 못하도록 막는 것을 쓰레드의 동기화 (synchronization) 이라고 한다. 자바에서는 synchronized.. 이전 1 2 3 4 5 6 ··· 9 다음