전체 글 51

MSA-Order-API 프로젝트 설정

MSA 강좌 중 예제 Order API 소스코드 실행 설정 1. 로컬 컴퓨터에서 docker-compose로 mysql 설치 (명령어 실행전에 docker desktop 실행)docker-compose up --build  터미널에서 명령어 입력시 docker-compose 설정대로 pulling한다.  RUN ./gradlew bootJar --no-daemon Error가 발생해서 그대로 터미널에 입력../gradlew bootJar --no-daemon 빌드 성공. 2. Docker 터미널에 접속  docker-compose에 입력된대로 터미널에 입력docker run --name order-api-order-db-1 -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_..

항해99 2025.02.11

[Java] Hash 알고리즘과 Hash충돌

간단한 배열에서 값을 찾는 코드를 보자.Integer[] arr = new Integer[4];arr[0] = 1;arr[1] = 2;arr[2] = 5;arr[3] = 8;int searchValue = 8;for (Integer inputValue : arr) { if(inputValue == searchValue) { System.out.println(inputValue); } }} 위 arr 배열에서 searchValue = 8을 찾으려면 foreach 문에서 처럼 배열을 모두 뒤져야 찾을수있다.따라서 성능은 O(n) 이다. 배열의 장점이라고 할수있는 Index로 데이터를 검색했을때 매우 빠르게 검색할수있다. 즉 Index로 검색시 O(1)의 성능으로 찾을수있다. 만약 데..

코딩조각 2024.06.21

[javascript] Javascript에서 자주나오는 'this'란 뭘까

Javascript 'this' this의 값은 함수를 호출하는 방법에 의해 결정된다. 클로저는 선언되는 위치에 의해 달라진다. this는 누가 호출했느냐가 this가 된다. 즉 "호출한객체가 this이다." 예제를 보면 const a = { name : 'code', who : function(){ console.log(this); }}a.who(); 를 호출하면 who function안의 console.log(this)가 실행되고 여기서의 this는 a가 who()를 호출한것이 되므로 const a 객체 본인이된다. 그럼 코드를 변형시켜서 let b = a.who; 즉 a객체의 who함수를 변수 b에 할당하고 b를 실행해보자 b(); 그럼 b()는 a.who이고 a.who() 가 실행되면 con..

코딩조각 2024.04.26

[Java] 다형성에 대해 알아보자(feat.다형적 참조, 메서드 오버라이딩)

객체지향 프로그래밍의 대표적 특징들은 다들 알고있을것이다. 추상화, 캡슐화, 상속, 다형성... 그중에 가장 중요하고 이해하기 어렵다는 다형성에대해 알아보자. 다형성은 Polymorphism이라는 이름 그대로 '다양한 형태', '여러 형태'를 말한다. 프로그래밍에서 다형성은 한 객체가 여러 타입의 객체로 취급될수 있는 능력을 말한다. 즉 타입이 결정되어있는 하나의 객체가 다른 타입으로 사용 될수 있다는 뜻이다... 아직 무슨말인지 정확히 모르겠으니 자세히 알아보자 다형성을 이해하기 위해선 2가지 핵심 이론을 알아야 한다. 1. 다형성 참조 2. 메서드 오버라이딩 다형성 참조란 간단히 말해서 "부모는 자식을 담을수 있지만 자식은 부모를 담을수 없다" 라고 할수있다. 다음 그림을 보자 Parent를 상속하는..

코딩조각 2024.02.22

[JPA] 영속성 컨텍스트가 뭐야? Entity Manager는 뭐

JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 2. 영속성 컨텍스트 EntityManagerFactory -> 고객요청시 EM 생성 -> EM은 내부적으로 DB connection을 사용해서 DB 자원에 접근하고 사용\ 그럼 영속성 컨텍스트라는게 대체 뭔가? 한마디로 정의하면 "엔티티를 영구 저장하는 환경"이라는 뜻 -> EntityManager.persist(entity); 여기서 persist() 는 entity를 db에 저장하는게 아니다. 영속성 컨텍스트를 통해서 엔티티를 영속화 한다는뜻이다. 쉽게말해 엔티티를 영속성 컨텍스트라는곳에 저장하는것이다. 영속성 컨텍스트가 그래서 뭔데... 사실 영속성 컨텍스트는 논리적인 개념이다...

카테고리 없음 2024.01.11

[Spring] 엔티티 설계시 주의사항

엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있다면, 변경 포인트가 너무 많아서 유지보수가 힘들다. 모든 연관관계는 지연로딩으로 설정! (외워야함! 중요!) 즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행될지 추적하기가 어렵다. 특히 JPQL을 실행할때 N+1문제가 자주 발생한다. 실무에서는 모든 연관관계를 지연로딩(LAZY)로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면 'fetch join'또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne)관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야한다. 컬렉션은 필드에서 초기화하자 컬렉션은 필드에서 바로 초기화 하는것이 안전하다. private List orderIte..

코딩조각 2024.01.02

[IntelliJ] 김영한선생님이 알려주신 인텔리제이 유용한 단축키 모음 + 접근제어자 종류

회사에서는 윈도우를 사용하고 있으므로 윈도우 기준으로 작성하겠다. 단어 한칸 블록잡기 : ctrl + w -> 커서가 있는곳에 단어를 블록해준다. 단어 한방에 지우거나 바꿀때 유용 같은단어 전체 블록 : shift + F6 파라미터 정보보기 : ctrl + p 타입 + 변수 자동생성 : ctrl + alt + v 커서가 어디든 ; 붙여서 한줄 내려가기 : ctrl + shift + enter Generator : alt + insert Override : ctrl + o 직전에 썼던 클래스 목록보기 : ctrl + e 인라인 베리어블 : ctrl+alt+n 메서드로 뽑아내기(extract method) : ctrl+alt+m ->김영한님이 제일 좋아하는 단축키라고 함 메서드에서 테스트코드 만들기 : ct..

CS IT지식 2023.12.12

[java] static 메서드 사용법(주의점)

static 메서드는 static 만 사용할 수 있다. 클래스 내부의 기능을 사용할 때, 정적 메서드는 static 이 붙은 정적 메서드나 정적 변수만 사용할 수 있다. 클래스 내부의 기능을 사용할 때, 정적 메서드는 인스턴스 변수나, 인스턴스 메서드를 사용할 수 있다. 반대로 모든 곳에서 static 을 호출할 수 있다. 정적 메서드는 공용 기능이다. 따라서 접근 제어자만 허락한다면 클래스를 통해 모든 곳에서 static 을 호출할 수 있다. 무슨 말이냐하면 static 메서드는 static끼리만 사용가능하다. static메서드에서 새로 만들어진 instance의 변수나 instance의 메서드의 사용은 불가능하다는 말이다. 하지만 static을 붙인 순간 method 메모리의 static영역에 계속 ..

코딩조각 2023.12.11

[java] java는 항상 변수의 값을 복사해서 대입한다

변수의 값을 복사해서 넣는다는 말이 무슨말일까??? 위에서 int num1 = 5라고 먼저 선언했다 다음으로 int num2 바로 num1의 값을 복사해서 num2에 넣었기때문에 num1과 num2의 값은 아무 상관관계가 없다. 따라서 num1은 5, num2는 10을 넣어준 마지막 코드때문에 num2 = 10이 된다 다음 코드를 보면 더 이해하기 쉬워진다 1. changeNumber 호출 전 , num1: 5 이다 2. changeNumber 변경 전, num2는 changeNumber(num1)에서 받은 5값이 인수로 받아서 5가된다 3. changeNumber 변경 후, num2는 위에 코드 num2 = num2 * 2에서 파라미터 num2가 5로 받아서 왔기때문에 num2 =5*2가 되고 따라서 ..

코딩조각 2023.12.07

[NAS] Synology Nas에서 http를 https 주소로 바꿔보자

Docker 에 Container로 app server까지 띄우는데 성공! 그런데 계속 uri를 http://ip:port로 접속해야해야했다. https를 넣는 방법이 없을까 하고 찾아보는 와중에 다른 블로그를 참고하여 https로 바꾸는데 성공! 참고 : https://siane.tistory.com/328 먼저 nas의 DNS -> 제어판 -> 외부 액세스 -> 고급 탭에서 다음과 같이 설정 일반적으로 http가 쓰는 포트인 80과 https 포트인 443을 열어서 설정해준다. 다음으로 제어판 -> 로그인 포털 -> 고급탭에서 '역방향 프록시'로 들어간다 '생성' 버튼을 눌러 http주소를 https로 설정해보자 이름에는 역방향 프록시 주소 이름을 넣고 소스의 프로토콜은 HTTPS 호스트이름은 알아서..

CS IT지식 2023.12.06