분류 전체보기95 [Java] 싱글톤(Singleton)이란? 싱글톤 패턴이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴 생성자가 여러번 호출되어도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최로에 생성한 객체를 리턴한다. 아래는 예시이다. 1 2 3 4 5 6 7 8 9 10 11 public class SingleTonEX{ private static SingleTonEx instance; //singleTonEx클래스를 static으로 선언하여 다른곳에서 사용할 수 있게 함 private SingleTonEx(){} //생성자를 외부에서 호출 못하게 private으로 생성 public static SingleTonEx getInstance(){ if(instance==null){ SingleTon = new SingleTonEx();.. BackEnd/Java 2022. 10. 10. [Spring] Spring Bean 이란? 스프링 빈(Spring Bean) 이란? Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 한다. IoC의 특징 일반적인 자바는 모든 작업을 사용자가 제어하는 구조이다. A 객체에서 B 객체에 있는 메소드를 사용하려면 A 객체 내에서 B 객체를 직접 생성하고 메소드를 호출한다. 즉, 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성/조작하는 작업을 한다. 하지만 IoC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 때 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. 즉 사용자의 제어권을 다른 주체에게 넘기는 것을 IoC(제어의 역전)라고 한다. 우리는 일반적으로 자바에서 Class를 생성하고 new를 입력.. BackEnd/Spring 2022. 10. 10. [Java] 메소드 레퍼런스란? 메소드 레퍼런스란? 람다식에서 불필요한 매개변수를 제거하여 사용할 수 있게 해주는 것 즉, 람다 표현식을 더 간력하게 만드는 표현방법이라고 할 수 있다. 메소드 레퍼런스를 이해하기 위해선 람다식을 이해해야 한다. 람다식 이해에 관한 글은 아래 링크에서 확인할 수 있다. https://grandma-coding.tistory.com/entry/Java-함수형-인터페이스란 [Java] 함수형 인터페이스란? 함수형 인터페이스란? 추상 메서드를 하나만 갖는 인터페이스 @FuncationInterface 어노테이션을 갖는 인터페이스 Single Abstract Method(SAM) 인터페이스 예시 1 2 3 public interface FunctionalInterface {.. grandma-coding.tis.. BackEnd/Java 2022. 10. 9. [SQL] ORDER BY와 JOIN 사용 시 정렬 제대로 안됨... 개발 중 ORDER BY가 정상적으로 작동하지 않는 상황이 발생했다. 검색해보니 서브쿼리 내에서 ORDER BY를 사용하고 JOIN을 걸면 이런 문제가 발생한다고 한다. A 테이블 내 쿼리 실행-> B 테이블 내 쿼리 실행 -> 두개 테이블 조인 -> 조건에 부합하는 데이터 체크 -> 정렬 -> 출력 이게 이상적인 순서라면 서브쿼리 내에서 사용했을 때는 A 테이블 내 쿼리 실행-> A 테이블 정렬 -> B 테이블 내 쿼리 실행 -> 두개 테이블 조인 -> 조건에 부합하는 데이터 체크 -> 출력 이렇게 작동한다는 것이다. 해결 방법은 ORDER BY를 가장 바깥쪽으로 빼주는 것이다. 어떤 글에선 limit를 걸면 해결이 된다는데 내 경우엔 변화가 없었다. 원인은 잘 모르겠다... 이거 때문에 CS 들어오고.. DB/SQL 2022. 10. 9. JWT(Json Web Token)란? JWT란? JWT는 인증 방식 중 하나로, 사용자 인증을 위한 토큰(Token) 기반 인증 방식이다. 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용한다. Json 형태이며 string 형태로 저장된다. 세션과 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다. JWT가 가지는 주요 특징은 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함되어 있다는 것이다. 따라서 데이터가 길어지면 토큰도 길어지게 되며 토큰이 발 번 발급된 이후 사용자의 정보를 바꾸더라도 토큰을 재발급하지 않는 이상 반영되지 않는다. JWT는 RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있.. Web 2022. 10. 3. [Spring] @Transactional 제대로 알고 사용하기 트랜잭션이란? 비즈니스 로직에서 쪼갤 수 없는 하나의 작업 단위이다. 데이터베이스의 상태를 변경하며 한 번에 수행되어야 한다. begin, commit 을 자동으로 수행해주며, exception 발생 시 자동 rollback 처리해준다. 처리 방법 스프링에서 어노테이션 방식으로 메소드, 클래스, 인터페이스 위에 추가하여 사용한다. 이 방식을 선언적 트랜잭션이라고 부르며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit / rollback 시켜준다. @Transactional 옵션 1. isolation 트랜잭션에서 일관성없는 데이터 허용 수준을 설정 2. propagation 트랜잭션 동작 도중 다른 트랜잭션을 호출할 때, 어떻게 할 것인지 지정하는 옵션 3. noR.. BackEnd/Spring 2022. 10. 3. [MySQL] SELECT ~ FOR UPDATE 란? SELECT ~ FOR UPDATE 란 SELECT ~ FOR UPDATE 는 선택된 행들에 대해 배타적으로 LOCK을 거는 것이다. 즉 "데이터 수정하려고 SELECT 했어. 건드리지마 !" 와 같은 뜻이다. 위와 같은 경우 동시제어가 필연적으로 필요하다. 은행의 예금 및 통장의 잔액 변경 시 일관성을 유지하기위해, 영화 및 공연장의 특정 좌석을 예약하기 위해 사용한다. SELECT FOR UPDATE를 사용하지 않으면 다른 세션에서 업데이트를 하고 있어도 같은 행을 조회가능하며, COMMIT을 하기 전까지는 결과가 반영되지 않는다. SELECT ~ FOR UPDATE 의 옵션 SELECT ~ FOR UPDATE: 누군가가 LOCK 중이면 무한정 기다려야 한다. SELECT ~ FOR UPDATE NO.. DB/SQL 2022. 10. 2. [Java] 함수형 인터페이스란? 함수형 인터페이스란? 추상 메서드를 하나만 갖는 인터페이스 @FuncationInterface 어노테이션을 갖는 인터페이스 Single Abstract Method(SAM) 인터페이스 예시 1 2 3 public interface FunctionalInterface { public abstract void doSomething(); } Colored by Color Scripter cs 함수형 인터페이스를 사용하는 이유 자바의 람다식을 사용할 때 함수형 인터페이스로만 접근이 가능하기 때문이다. @FuncationInterface 어노테이션을 붙여주면 함수형 인터페이스의 규칙을 위반했을 때 에러를 발생시킨다. 기존 방식 1 2 3 4 5 6 7 8 FunctionalInterface func = new F.. BackEnd/Java 2022. 10. 2. [JPA]변경 감지(Dirty Checking)와 병합(merge) 준영속 엔티티란? 영속적 컨텍스트가 관리하지 않는 엔티티. DB에 한 번 거친 데이터(식별자가 생성된 상태). 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티. 준영속 엔티티를 수정하는 방법 2가지 1. 변경감지(Dirty Checking) @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회한다. findItem.chagePrice(itemParam.getPrice()); //데이터를 수정한다. } 영속성 컨텍스트에서 데이터를 다시 조회한 후에 데이터를 수정하는 방법 파라미.. DB/JPA 2022. 9. 25. [Linux] tail 명령어 사용법(실시간 로그 보기) 1. tail 명령어란? 리눅스 계열 유틸리티로, 파일의 마지막 부분을 출력하는 명령어입니다. tail 명령어는 시간에 따라 변화하는 파일을 grep과 같은 명령어와 조합시켜 실시간으로 업데이트 되는 로그를 볼 때 많이 사용됩니다. 2. tail 명령어 사용법 tail [옵션] [파일명] tail filename.txt tail -f filename.txt 자주 사용하는 옵션 -f : 파일을 종료하지 않고 파일의 업데이트 내용을 실시간으로 출력한다. -n [라인 수] : 파일의 마지막 줄부터 지정한 라인 수 까지 출력한다. -c [바이트 수] : 파일의 마지막 줄부터 지정한 바이트 수까지 출력한다. -q : 파일의 헤더와 상단 파일의 이름을 출력하지 않고 내용만 출력한다. -v : 파일의 헤더와 상단 파.. Network/Linux 2022. 9. 11. [Linux] vi 명령어 정리 1. vi 명령어란? : Linux, Unix에서 사용하는 vi 편집기 명령어 2. vi 편집기 구조 vi 편집기는 명령 모드, 입력 모드, 마지막 행 모드로 구성되어있다. i ) 명령 모드 (Command Mode) : vi를 시작할 경우 실행되는 모드. 방향키를 통해 커서를 이동할 수 있다. 입력 모드를 진입한 후 [ESC]를 누르면 명령 모드로 돌아온다. ii ) 입력 모드 (Insert Mode) : 명령 모드 상태에서 i, a를 입력하여 입력 모드로 전환할 수 있다. 직접 글이나 코드를 작성할 수 있는 상태이다. 명령 모드로 돌아갈 땐 [ESC]를 누르면 된다. i : 커서가 현재 위치한 부분에서 시작 a : 커서 바로 다음 부분에서 시작 iii ) 마지막 행 모드 : 명령 모드에서 :(콜론)을.. Network/Linux 2022. 9. 11. [JAVA] LinkedList의 개념 및 사용법 LinkedList란 ? 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조 풀어쓰자면 다음과 같다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당한다. 중간에 데이터를 추가하거나 삭제해도 인덱스가 당겨지거나 밀리는 현상이 없다. 따라서 ArrayList에 비해 데이터 추가/삭제가 용이하지만 인덱스가 없기 때문에 탐색 속도가 느리다. 따라서 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이터의 추가/삭제가 많은 경우 연결리스트를 사용하는 것이 좋다. LinkedList 사용법 1. LinkedList 선언 1 2 3 4 5 LinkedList list = new LinkedList();//타입 미설정. Object로 선언.. BackEnd/Java 2022. 9. 7. 이전 1 2 3 4 5 ··· 8 다음