목록💡 백엔드/Java (74)
코딩마을방범대
참고 application.yml에서 가져오기 1. yml에 필요한 정보 기입 aes: key: "secreyKey" 2. build.gradle에 dependency 추가 annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" 3. yml 정보를 가져다 쓸 클래스 생성 getter, setter가 필요하므로 Data 어노테이션으로 대체 @Configuration 적용이 필요함 @ConfigurationProperties의 prefix에 그룹변수명 기입 @Configuration @Data @ConfigurationProperties(prefix = "aes") public class ApplicationSett..
해싱(hashing) 이란 해시 함수에 문자열 입력값을 넣어서 특정한 값으로 추출하는 것 해시 함수란? 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수 입력값을 해싱했을 때 출력값은 일정하다는 것을 근거로, 사용자의 비밀번호나 중요 정보의 내용을 해싱하여 복호화 할 수 없음 특징 어떤 입력 값에도 항상 고정된 길이의 해시값을 출력한다. 눈사태 효과 : 입력 값의 아주 일부만 변경되어도 전혀 다른 결과 값을 출력한다. 출력된 결과 값을 토대로 입력값을 유추할 수 없다. 해시 테이블 (Hash Table) 해시 함수로 매핑한 키 값을 인덱스로 한 배열 혹은 객체 Java : Hash Map Javascript : 객체 or Map Python : 사전(dictionary) 충돌 (Collisio..
Cipher 암호화, 복호화 기능을 제공 대칭키 알고리즘 암호문의 성질 혼돈(confusion) 암호문으로부터 키를 알아낼 수 없게 하는 성질 키의 비트 하나만 바꿔도 암호문 전체가 바뀌도록 하는 성질 확산(diffusion) 암호문으로부터 원문을 알아낼 수 없게 하는 성질 원문의 비트를 하나만 바꿔도 암호문 전체가 바뀌도록 하는 성질 암호 알고리즘 혼돈과 확산을 달성하기 위해 Substitution과 Permutation을 이용 Substitution - 문자를 다른 문자로 바꾸는 것 Permutation - 문자들의 순서를 바꾸는 것 SPN(Substitution Permutation Network) Substitution-Permutation을 연속하여 수행하도록 이어 놓은 것 데이터를 블록 단위로..
ModelMapper란 서로 다른 클래스의 값을 한번에 복사하게 도와주는 라이브러리 DTO와 Entity를 변환할 때 Getter, Setter을 이용할 경우 번거롭기 때문에 사용 modelmapper는 런타임시점에 리플렉션이 발생하므로 성능 저하가 매우 심함 컴파일 시점에 코드가 생성되는 mapstruct 사용하는 것을 권장 사용법 1. build.gradle // https://mvnrepository.com/artifact/org.modelmapper/modelmapper implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.1' 2. Configuration @Configuration public class Cust..
Autowired를 지양하는 이유 객체지향에서 피해야할 것은 지나치게 큰 의존도를 만드는 것 spring 초기 버전: xml파일에 Bean 명세를 적어 사용 ↓ ApplicationConfig에 java코드로 Annotation을 사용 ↓ @Autowired의 등장으로 명세를 적어줘야하는 일을 하지 않아도 됨 의존성을 주입하는 방법 1. @Autowired 사용 순환참조가 되는 경우 빌드과정에서는 알 수 없음 final 사용 불가능 순환참조의 문제점 컴포넌트 간의 명확한 경계가 사라지고 연쇄적으로 변경에 의한 영향이 발생 @Autowired private User user; 2. Setter 사용 set하지 않을 경우 NullPointException 발생 private User user; @Autowi..
스케쥴러란? 일정 시간마다 코드를 실행시킬 수 있음 스레드(sleep)을 이용하면 제대로 관리하지 못할 경우 exception이 날 수 있음 사용법 1. 메인 클래스에 어노테이션 선언 @SpringBootApplication @EnableAsync @EnableScheduling public class Task4SchedulerApplication { 2. 스케쥴링 기능을 사용할 메소드 Scheduled, Async 어노테이션을 추가(사용할 클래스는 bean이여야함) // 타임존은 제외 가능 @Async @Scheduled(cron="0/60 * * * * ?", zone="Asia/Seoul") public void test() { System.out.println("1분마다 실행"); } 💡 Asyn..
JAVA를 이용한 JSON 데이터 파싱 방법 json 데이터를 활용할 일이 매우 많은데, API에서는 객체로 바로 받아올 수 있지만 json 문자열로 받아와서 사용해야 하는 경우도 많다. 이럴 경우 json 데이터를 여러 방면으로 사용할 수 있는데, 아래에서 확인해보자! JSON 객체와 문자열 우선 json 객체를 사용하려면 의존성 추가가 필요하다 build.gradle // https://mvnrepository.com/artifact/org.json/json implementation group: 'org.json', name: 'json', version: '20230227' 문자열 -> JSON 객체 ( str to json ) Object 로 가져오기 JSONObject jObject = new..
enum이란 한정된 개수의 값들을 하나로 묶어 사용 가능한 자바 파일 enum 생성 enum 값들 세팅 ( 값들 사이엔 콤마[,]를 이용해 연결하고, 마지막 값엔 세미콜론[;]으로 닫기 ) enum 값의 순서대로 전역 변수 선언 @Getter @AllArgsConstructor public enum Num { ONE("one", 10), TWO("two", 20); private final String name; private final int value; } enum 호출 Num.ONE Enum의 메소드 values() enum의 모든 값들을 배열로 만들어 리턴해줌 for (Num num : Num.values()) { System.out.println(Num.getName()); // one // t..