Java 프로젝트를 컴파일하려면 jdk가 필요하다.컴퓨터가 java를 컴파일 하기 위한 javac를 찾을 수 있도록 환경변수를 설정해서 jdk의 위치를 지정해줘야 한다.컴퓨터한테 jdk 위치를 알려주는 과정..간단하지만 알아두면 앞으로 자주 쓸 것 같아서 기록해 둔다.이 글은 2024년 10월 14일, Windows 11 버전을 사용하는 환경에서 작성했다.0. jdk 설치우선 jdk를 설치해야 한다.여기선 C:\dev_files\jdk\openjdk-1.8에 위치한다는 것을 가정하고 설명한다.1. 시스템 환경변수 검색해서 "시스템 환경변수 편집"으로 들어가도 되고,제어판 - 시스템 - 고급 시스템 설정(시스템 속성) - 환경변수로 들어가도 된다.2-1. 시스템 변수 설정중요한 것은 jdk 위치이다.그런데..
들어가기 전에, 소켓에 대한 글을 보고 오시는 걸 추천합니다.[컴퓨터 공학/Web & Network] - [Network] 포트(PORT), 소켓(Socket)이란? (웹소켓 아님 Web Socket != Socket) [Network] 포트(PORT), 소켓(Socket)이란? (웹소켓 아님 Web Socket != Socket)포트(Port)Port는 운영체제 통신에서의 네트워크 연결이 시작되고 끝나는 논리적인 접속 지점을 말한다. 보통 http://192.168.1.1:8080과 같이 프로토콜/호스트/포트로 구분되어 도메인이 정의된다. 여innovation123.tistory.com Java 소켓 Java에서 Socket을 직접 열고, 소켓 통신을 하는 방법을 알아보자. ServerSocket과 C..
스프링 부트에서는 @Transactional 어노테이션을 이용하여 복잡한 트랜잭션 처리를 단순화한다. 클래스, 메서드 단위로 어노테이션을 추가할 수 있고, 스프링이 AOP를 통해 프락시를 도입하여 트랜잭션 처리를 모두 해결해 준다. @Transactional 세부 설정 트랜잭션의 세부 설정을 통해 상황별로 적절한 설정을 하여 성능을 최적화할 수 있다. @Transactional 세부 설정 종류 Isolation (격리 수준 설정) Propagation(전파 수준 설정) readOnly 속성 트랜잭션 롤백 예외 설정 time-out 설정 1. Isolation(격리 수준) 일관성이 깨지는 것을 어느 정도까지 허용하느냐에 대한 설정이다. 기본 설정은 DEFAULT이다. @Transactional(isolat..
여러 문자열을 이어 붙일 때 보통 StringBuilder를 사용했었습니다. 그런데 특정 상황에서 더 유용한 클래스가 있어서 소개하려 합니다. StringBuilder를 썼을 때 아쉬운 점 아래와 같이 반복문으로 문자열을 이어 붙일 때 마지막에 구분자가 append 되는 것을 처리해야 하는 문제가 있다. String[] arr = {"one", "two", "three"}; StringBuilder sb = new StringBuilder(); for(int i = 0; i < arr.length; i++){ if(i == arr.length - 1){ sb.append(arr[i]); break; } sb.append(arr[i]).append(","); } System.out.println(sb); ..
깊은 복사 vs 얕은 복사 Java에서 객체를 복사할 때, 깊은 복사와 얕은 복사라는 개념이 있다. 간단하게 정리하자면 깊은 복사 : 실제 값을 새로운 메모리 공간에 복사하는 것이고, 얕은 복사 : 주소 값을 복사하는 것이다. 간단 예제 아래 예제를 통해 일단 간단히 알아보자. int[] original = new int[]{1,2,3}; int[] shallowCopy = original; //얕은 복사 int[] deepCopy = original.clone(); //깊은 복사 //주소 값 확인 System.out.println("주소-original = " + System.identityHashCode(original)); //주소-original = 191382150 System.out.print..
Java의 모든 객체는 Object 클래스를 상속받고 있다. Object 클래스는 객체의 동일성을 비교하기 위한 equals와 hashCode 메서드가 정의되어 있다. 따라서 Java의 모든 객체는 필요에 따라 equals와 hashCode를 재정의할 수 있다. equals() equals()는 두 객체의 값이 같은지 여부를 비교할 때 사용하는 메서드이다. 객체를 비교할 때 기본적으로 객체의 주소를 비교한다. public static void main(String[] args) { Car car1 = new Car(1111, "blue"); Car car2 = new Car(1111, "blue"); System.out.println(car1 == car2); //두 객체는 주소가 다르기 때문에 fals..
빈 스코프란? 스프링 빈은 기본적으로 싱글톤으로 관리된다. 그래서 스프링 컨테이너는 스프링 싱글톤 컨테이너라고 불리기도 한다. 그러나 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. "스코프"는 빈이 존재할 수 있는 범위를 뜻한다. 한마디로 빈 스코프는 빈이 존재할 수 있는 범위 또는 빈의 라이프사이클의 범위라고 생각할 수 있을 것 같다. 스프링은 아래와 같이 다양한 빈 스코프를 지원한다. 싱글톤 : default, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 빈의 생성과 의존성 주입까지만 관여하고, 더 이상 관리하지 않는 짧은 범위의 스코프 웹 관련 스코프 : request, session, application 등 여러 스코프..
Spring Bean LifeCycle Spring DI 컨테이너는 Bean으로 등록된 객체의 생명주기 관리를 위임받아서 관리하고, 객체가 필요한 곳에서 이 Bean을 의존성 주입받아서 사용할 수 있다. 스프링 컨테이너가 생성될 때 객체(Bean)를 생성하고 의존성을 주입하는데, 의존관계 주입 후 Bean을 초기화하고, 스프링 컨테이너를 종료하기 전에 객체를 소멸시켜야 한다. 객체의 생성과 초기화 분리 객체를 초기화 한다는 것은, 객체 생성 이외에 외부 커넥션을 연결하거나, 초기값을 등록하는 등의 여러 작업을 말한다. 이 과정을 생성자에서 진행해도 되지만, 객체 생성에 비해 초기화는 비교적 무거운 일을 수행하기 때문에 객체를 생성하는 부분과 초기화하는 부분을 명확하게 나누는 것이 좋다. 빈 생명주기 스프..