본문 바로가기

전체 글

(419)
[Windows] 로컬 DNS 매핑 보호되어 있는 글입니다.
[Docker] Docker Compose - 컨테이너 보안 보호되어 있는 글입니다.
[Python] top-level 코드 ( import시점 & runtime 시점 ) 파이썬에서 top-level 코드는 해당 모듈의 import 시점에, 단 한 번만 실행된다.* top-level 코드 : 함수/클래스 밖의 모듈. ( if 분기문, for 반복문, print 등 포함 ) (config.py)from datetime import datetimeprint(f"===import 시점 실행===")NOW = datetime.now() # top-level 코드print(f"[config.py] NOW(import): {NOW}")print(f"===import 시점 실행===")def get_current_time(): # top-level 코드 global NOW return NOW(main.py)from config import get_current_tim..
[JAVA] 타입 소거 (Type Erasure) 자바의 타입 소거? 자바의 설계 철학과 하위 호환성 때문에 생긴 개념. 기존 자바코드(JDK 1.4 이하)는 아래처럼 타입 안정성이 보장되지 않았었는데List list = new ArrayList();list.add("hello");list.add(123); // 문제 없음자바5부터 아래처럼 제네릭이 도입되면서 컴파일 과정에서 데이터 타입을 검사하게 됨.List list = new ArrayList();list.add("hello");list.add(123); // 컴파일 에러 제네릭 기능을 기존 자바 코드와 호환되게 하면서도, JVM 구조를 변경하지 않고 도입하기 위한 기법이 타입 소거!!컴파일 시에 제네릭을 검사하지만, 컴파일 이후에는 타입 정보가 사라지게 된다. 이로 인해 아래의 문제점들이 발생..
웹훅(Webhook) 웹훅(Webhook)특정 이벤트가 발생하면 지정된 URL로 HTTP (POST)요청을 자동으로 보내는 방식. (ex) 결제완료알림, 푸시알림 등..) 웹훅 수신 서버에서는 요청에 대한 처리 로직 실행.웹훅 요청 서버 : 이벤트 발생 --> 웹훅 요청 (자동전송)웹훅 수신 서버 : 웹훅 요청 수신 --> 이벤트타입/기본정보 확인 (--> 추가정보 필요시 API 호출) --> 내부 처리 진행.웹훅요청은 단순히 특정 이벤트에 대한 알림용 신호이기 때문에 요청 데이터에는 간단한 요약정보만 포함.따라서 수신 서버에서는 알림을 받으면 API를 호출해서 추가 정보를 얻는 방식으로 진행. ** API는 클라이언트의 요청에 대해 응답을 받아 처리하지만,웹훅은 요청 없이도 이벤트 발생시 서버에서 자동으로 데이터를 전송한다..
[Java] ObjectMapper (2) TypeReference, 설정메서드, 어노테이션 * TypeReference Jackson의 ObjectMapper에서 제공하는 클래스로역직렬화(deserialization) 과정에서 제네릭 타입 정보를 전달하기 위해 사용.** 단일 객체가 아닌 복잡한 타입인 경우, 런타임에 타입 정보가 사라지기 때문에 명시적으로 타입을 전달해줘야함.      List, Map, List>     JSON 문자열 --> List String json = "[{\"name\":\"phyho\",\"age\":10}]";List users = mapper.readValue(json, new TypeReference>() {});  JSON 문자열 --> MapString json = "{\"name\":\"phyho\", \"age\":10}";Map map = mapp..
[Java] ObjectMapper (1) 주요 메서드 * ObjectMapper  Jackson 라이브러리에서 제공하는 클래스로 JSON 데이터와 Java 객체 간의 직렬화 및 역직렬화에 사용. ( Java 객체 ↔ JSON ) ex) User 클래스public class User { private String name; private int age; // 생성자와 getter/setter 필수 public User() {} public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } ..
[MyBatis / MySQL] useGeneratedKeys, keyProperty, keyColumn * useGeneratedKeys="true" DB에서 자동 생성된 기본 키(PK)값을 Java 객체로 가져올 수 있는 MyBatis 설정.( JDBC의 getGeneratedKeys() 호출을 MyBatis가 자동으로 처리해준다 )* keyPropertyJava 객체 필드명* keyColumnDB테이블 컬럼명  INSERT INTO test_table (item_id, item_name, item_des) VALUES (#{itemId}, #{itemName}, #{itemDes})=> 해당 컬럼에 대한 AUTO_INCREMENT 설정 필요 (MYSQL) => keyProperty 와 keyColumn 각각 이름 일치여부 주의  insert 이후에 생성된 키(id)를 받아 바로 update를..