good_da22 's devLog

java 61

Smart Card IO

JAVA NFC java의 javax.smartcardio 라이브러리를 이용한 nfc writer 구현 NFC란? 무선태그(RFID) 기술 중 하나로 비접촉식 통신 기술 근거리 무선 통신 (Near Field Communication, NFC)으로 13.56MHz의 대역을 가지며 아주 가까운 거리(접촉 및 근접 비접촉(약 10cm) 포함)의 무선 통신을 하기 위한 기술 모드에 따라 쓰기(write)와 읽기(read)가 가능하며 대부분의 스마트폰에서 NFC 기능을 제공한다. 양방향 통신으로 상대 기기로 정보를 주기도 하며 상대 기기에서 정보를 가져오기도 한다. Java smartcard I/O API // java smartcardio NFC Write example code public class Nfc..

Java 2023.03.22

Interceptor

Interceptor HandlerInterceptor를 통한 요청 가로채기 Controller가 요청을 처리하기 전/후 처리 로깅, 모니터링 정보 수집, 접근 제어 처리 등의 실제 Business Logic과는 분리되어 처리해야 하는 기능들을 넣고 싶을 때 유용 interceptor 여러 개 설정 가능, 순서 주의 HandlerInterceptor 제공 default method boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) fasle를 반환하면 request를 바로 종료 void postHandle(HttpServletRequest request, HttpServletResponse ..

Spring Web MVC 2

Spring Web MVC Controller @Controller 와 @RequestMapping 선언 스프링 4.2버전까지는 아래와 같은 방식으로 작성 @RequestMapping(value = "URL", method = RequestMethod.GET or RequestMethod.POST) 이후 버전에서는 @GetMapping("URL") 또는 @PostMapping("URL") 사용 Method 단위의 mapping이 가능 DefaultAnnotationHandlerMapping과 AnnotationHandlerAdapter를 사용함 Spring 3.0부터는 기본 설정이므로 별도의 추가 없이 사용 가능 Controller Class는 Client의 요청을 처리 @Controller 선언 Cla..

Spring Web MVC

Spring Web MVC MVC(Model-View-Controller) Pattern 어플케이션의 확장을 위해 Model, View, Controller 세 가지 영역으로 분리 컴포넌트의 변경이 다른 영역 컴포넌트에 영향을 미치지 않음(유지보수 용이) 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이(확장성이 뛰어남) 장점 화면과 비즈니스 로직을 분리해서 작업 가능 영역별 개발로 인하여 확장성이 뛰어남 표준화된 커드를 사용하므로 공동작업이 용이하고 유지보수성이 좋음 단점 개발과정이 복잡해 초기 개발속도가 늦음 초보자가 이해하고 개발하기 다소 어려움 Model 어플리케이션 상태의 캡슐화 상태 쿼리에 대한 응답 어플리케이션의 기능표현 변경을 view에 통지 View 모델을 화면에 시각적으로 표현 모델에게..

AOP (Aspect Oriented Programming)

AOP (Aspect Oriented Programming) OOP(Object Oriented Programming)에서 모듈화의 핵심 단위는 클래스 AOP(Aspect Oriented Programming)에서 모듈화의 단위는 Aspect Aspect는 여러 타입과 객체에 거쳐서 사용되는 기능(Cross Cutting(공통 관심사항), Core Concern(핵심 관심사항), 트랜잭션 관리 등)의 모듈화 Spring Framework 의 필수 요소는 아니지만, AOP 프레임워크는 Spring IoC를 보완 AOP 용어 Aspect 여러 클래스에서 공통적으로 구현되는 관심사(Concern)의 모듈화 JoinPoint 메서드 실행이나 예외처리와 같은 프로그램 실행 중의 특정 지점, Spring에서는 메서..

Dependency Injection

Dependency Injection 의존성 주입 Bean 생성범위 싱글톤 빈(Singleton Bean) 스프링 빈은 기본적으로 싱글톤으로 만들어진다. 따라서 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일 컨테이너가 항상 새로운 인스턴스를 반환하게 만들고 싶을 경우 scope를 prototype으로 설정 singleton 스프링 컨테이너당 하나의 인스턴스 빈만 생성(default) prototype 컨테이너에 빈을 요청할 때마다 새로운 인스턴스 생성 request HTTP Request 별로 새로운 인스턴스 생성 session HTTP Session 별로 새로운 인스턴스 생성 Spring Bean 설정 XML Document, Annotation, Java Code 메타 정보의 표현 방식 Bean..

IoC & Container

Ioc & Container IoC (Inversion of Control, 제어의 역행) 객체지향 언어에서 Object간의 연결 관계를 런타임에 결정 객체 간의 관계가 느슨하게 연결됨(loose coupling) IoC의 구현 방법 중 하나가 DI(Dependency Injection) IoC 유형 Dependency Lookup 컨테이너가 lookup context를 통해서 필요한 Resource나 Object를 얻는 방식 JNDI Lookup JNDI 이외의 방법을 사용한다면 JNDI 관련 코드를 오브젝트 내에서 일일이 변경해주어야 한다. Lookup 한 Object를 필요한 타입으로 Casting 필요 Naming Exception을 처리하기 위한 로직 필요 Dependency Injection ..

Spring Framework

Spring Framwork Spring Framwork 등장 배경 기존 EJB(Enterprise JavaBean) 을 사용하여 애플리케이션 작성을 쉽게 할 수 있다. Low Level의 트랜잭션이나 상태관리, 멀티 쓰레딩, 리소스 풀링과 같은 복잡한 Low Level의 API를 이해하지 못해도 애플리케이션 개발 가능 하지만 현실에서 반영이 어려움 코드 수정 후 반영하는 과정 자체가 번거롭다. 기능은 좋지만 복잡한 스펙으로 인한 개발 효율성 감소 애플리케이션 테스트를 위해선 반드시 EJB 서버가 필요 웹 사이트가 점점 커지면서 엔터프라이즈급의 서비스가 필요 세션빈에서 Transaction 관리 용이 로긴, 분산처리, 보안 등 자바 진영에서는 EJB가 엔터프라이즈급 서비스로 각광 EJB 스펙에 정의된 인..

백준 14502번 연구소 (JAVA)

백준 14502번 연구소 (JAVA) 문제 난이도 골드 4 알고리즘 분류 구현 그래프 탐색 브루트포스 알고리즘 너비 우선 탐색 풀이 주어진 빈 공간(상태가 0 인 공간) 중 3곳을 선택해서 벽을 설치한다. 벽을 설치한 후 바이러스를 인접한 상하좌우 공간으로 확산한다. 확산이 끝난 후 남은 빈 공간을 계산 코드 import java.io.*; import java.util.*; public class Main { static int[] dx = { -1, 1, 0, 0 }; static int[] dy = { 0, 0, -1, 1 }; static int N, M, answer; static int[][] map, test; static List space, virus; static boolean[][] ..

백준 14500번 테트로미노 (JAVA)

백준 14500번 테트로미노 (JAVA) 문제 난이도 골드 4 알고리즘 분류 구현 브루트포스 알고리즘 풀이 테트로미노의 크기는 4 각 위치에서 4방 탐색으로 갈 수 있는 모든 위치를 4번 탐색하는 것은 모든 테트로미노의 경우의 수(대칭, 회전)을 탐색하는 것과 같다. ㅗ, ㅏ, ㅜ, ㅓ 모양의 경우 한 방향으로 이어지지 않는다. 따라서 2번 때 탐색 시점에서 뻗어가는 경우를 계산한다. 코드 import java.io.*; import java.util.*; public class Main { static int N, M, answer; static int[][] arr; static boolean[][] visited; static int[] dx = { -1, 1, 0, 0 }; static int[]..