전체 글 143

Java - 커넥션 풀과 데이터소스

1. JDBC DriverManager Java에서는 JDBC 인터페이스를 각 DB벤더에 맞도록 구현해서, 개발자가 사용하는 벤더의 DB에 맞도록 구현하여 JDBC 드라이버를 제공합니다. 그 중, JDBC 인터페이스의 DriverManager는 각 벤더에 맞는 DB의 드라이버들을 관리하여 커넥션을 획득하는 기능을 제공을 합니다. DriverManager의 getConnection() 메서드를 통해 벤더의 드라이버에 커넥션을 요청하고, 라이브러리에 등록된 드라이버의 목록을 자동 인식하여 정보를 넘겨서 커넥션을 획득할 수 있는지 확인합니다. API를 살펴보면, url(jdbc:Driver 종류://IP:포트번호/DB명), user(DB의 ID), password(DB의 비밀번호)를 받도록 되어있습니다. 각 ..

Skills/Java 2022.10.13

AWS - EC2 인스턴스 생성하기

22년 10월 1일부터 AWS EC2 UI가 변경되어서 정리 차원에서 적어봤습니다. 1. EC2에 접속 좌측 메뉴에서 인스턴스 -> 인스턴스 시작을 눌러줍니다. 1.1 VPC 생성 EC2 생성을 위해서는 VPC와 서브넷이 필수입니다. VPC(Virtual Private Cloud)와 서브넷이 없다면 EC2 인스턴스는 서로 거미줄처럼 인터넷과 연결되는데, 이렇게 한다면 시스템이 복잡해지고 모든 인스턴스를 수정해야하는 귀찮은 점이 생기게됩니다. VPC를 적용하면 VPC별로 네트워크를 구성할 수 있어 이를 해결할 수 있습니다. VPC에서 VPC를 먼저 생성해줍시다. 2. 정보 입력 2.1 이름 및 태그 인스턴스 시작에 들어오면 저런 화면이 나옵니다. 먼저 이름 및 태그에 자신 프로젝트의 이름을 적어줍니다. 2..

Skills/AWS 2022.10.12

Java - static 키워드의 사용

얼마전 스터디에서 제가 Static 키워드에 대해 설명하던 도중 잘못알고 있던 부분이 있어 바로 잡으려고 글을 작성했습니다. 1. Static Java의 static keyword는 주로 메모리 관리에 사용되는 키워드로 주어진 클래스의 동일 변수나 메서드를 공유하는데 사용이 됩니다. 멤버(블록, 변수, 메서드, 클래스)가 정적으로 선언되면 해당 클래스의 개체가 생성되기 전(컴파일 타임)에 개체에 대한 참조없이 접근할 수 있습니다. Java에서 일반적으로 만든 Class는 Static 영역에 생성되고, new 연산자를 통한 객체 생성은 Heap 영역에 저장이 됩니다. 객체 생성 시 Heap 영역의 메모리는 GC의 관리를 받게 되는데, Static 영역에 할당된 메모리는 모든 객체가 공유하는 메로리로 GC의..

Skills/Java 2022.10.11

Java - 정적 팩토리 메서드를 고려하는 상황

조슈아 블로치의 Effective Java는 1장에 나오는 '생성자대신 정적 팩토리 메서드를 고려하라'는 주제로 시작됩니다. 생성자대신 사용하라는 것은 두 개 모두 클래스의 인스턴스를 얻는 수단이기 때문이죠. 둘을 비교하면서 살펴보겠습니다. 1. 정적 팩토리 메서드 (Static Factory Method) 먼저 정적 팩토리 메서드는 해당 클래스의 인스턴스를 반환하는 클래스 메서드입니다. 설명보다는 코드로 한번 보는 것이 좋을 것 같습니다. // 생성자 방식 public class Constructor{ String cons; public cons(String name){ this.name=name; } public static void main(String[] arts){ Constructor cons..

Skills/Java 2022.10.08

Java - JDBC

1. JDBC JDBC는 Java DataBase Connectivity의 약자로 Java 프로그램과 DB와 연결되어 주고 받을 수 있게 돕는 Java API로 DB에서 데이터를 쿼리하거나 업데이트 하는 방법을 제공합니다. 소개에 앞서 JDBC가 등장하게 된 배경부터 살펴봐야 될 것 같습니다. 애플리케이션을 개발시 중요 데이터는 DB에 보관하게 됩니다. 이 때 클라이언트가(App 혹은 브라우저에서) 애플리케이션 서버에 요청을 보내게 되면 비즈니스 로직을 수행하여 필요 데이터를 SQL로 전달하여 DB에 전달하게 됩니다. 위의 설명을 그림으로 요악하면 그림과 같습니다. 여기서 문제가 있습니다. DB의 종류에는 여러가지가 있어(MySQL, Oracle, Maria 등등.. ) DB마다 커넥션 연결하는 법, S..

Skills/Java 2022.10.04

Java - equals(), hashcode() 메서드의 사용

Java에서는 두 객체를 비교할 때 사용하는 메서드로 equlas()가 있는데 각 차이점을 알아보겠습니다. 1. Object class 설명에 앞서 Object class에 대해 짚고 넘어가겠습니다. 클래스 선언 시 extends 키워드로 상속하지 않는다면 java.lang.Object 클래스를 상속하게 됩니다. 이는 무엇을 의미하느냐 Java의 모든 클래스는 Object 클래스의 Super 클래스거나 sub클래스라는 의미입니다. Object 클래스에는 필드가 없고 메서드로만 구성되어 있는데, 이 메서드들이 모든 클래스가 Object를 상속하기 때문에 모든 클래스에서 사용이 가능한 것입니다. Java 공식 문서를 보면 getClass, hashCode, equals, clone, toString .. 등..

Skills/Java 2022.10.01

Spring - Argument Resolver를 이용한 패러미터 처리

Spring MVC 패턴에서 Argument Resolver의 역할을 알아보도록 하겠습니다. 1. MVC 흐름 Spring MVC 패턴 설계 시 대략적인 흐름은 그림과 같습니다. 클라이언트가 HTTP 요청을 보낸다면 DispatcherServlet(FrontController)에서 클라이언트 요청을 수신하고 요청된 URI를 기반으로 애플리케이션의 컨트롤러를 호출한 뒤, ViewResolver에 반환합니다. 이 때, ArgumentResolver가 Controller(Handler)에 공통으로 필요한 패러미터(객체)를 생성하고 Controller를 호출하면서 값을 넘겨주게 됩니다. 이를 Spring에서는 애노테이션 기반으로 인터페이스를 제공하는데 한 번 살펴보겠습니다. 2. 예시 @Slf4j @Contro..

Skills/Spring 2022.09.27

Java - 바이트 코드

글을 보시기 전에 JVM에 대해 적은 포스트를 한 번 참고하시는 것이 좋을 것 같습니다. 1. ByteCode 먼저 바이트 코드는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법으로 쉽게 말해 컴퓨터가 이해하기 쉽도록 컴퓨터 중심적인 코드입니다.(반대로는 사람이 읽기 쉽도록 쓰인 소스코드) Java에서는 Java 클래스 파일(.java)을 Java 컴파일러에서 JVM이 이해할 수 있는 Java bytecode(.class)로 변환합니다. 터미널에서 java 코드를 간단하게 작성한 뒤, 바이트 코드를 확인해볼 수 있습니다. 2. Code Coverage 코드 커버리지란 테스트 코드가 실행될 때 얼마나 많은 코드가 실행되었나(충족)를 나타내는 지표로 이를 수치로 확인할 수 있..

Skills/Java 2022.09.20

Java - JVM & Garbage Collector

Garbage Collection은 Java에서 메모리 관리 방법 중의 하나로, JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 의미합니다. (이 글에서 Static란에서 설명한 적이 있습니다.) Java의 장점 중 하나로, C나 C++같은 언어(Unmanaged Language)는 가비지 컬렉션이 없어 개발자가 수동으로 메모리 할당과 해제를 일일이 해줘야하는데, Java는 메모리 관리, 누수 문제를 대행하여 해결 해준다는 장점이 있습니다. 가비지 컬렉션 설명에 앞서 이해를 위해 JVM의 구조를 짚고 넘어가는 것이 좋을 것 같습니다. 1. JVM(Java Virtual Machine) 구조 위는 Java에서 프로그램 실행 단계를 나타..

Skills/Java 2022.09.16

Spring - Bean Scope 관리

1. Bean Scope Spring은 Bean이라는 개념으로 객체를 만들고 SIngleton화 시켜 관리합니다. 이 Bean으로 생성된 객체들은 Spring Container와 함께 시작되어서 종료될 때까지 Spring이 관리해주는데 이 이유는 Spring Bean들은 Singletone Bean으로 관리되기 때문입니다. 그렇다면 빈 스코프는? 스코프(Scope)는 영어 뜻 그대로 범위인데 직역 그대로 Bean이 관리되는 범위를 의미합니다. Spring이 가지는 Scope는 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다(따라서 빈..

Skills/Spring 2022.09.13