백준 : 어두운 굴다리(17266) 자바
·
알고리즘
https://www.acmicpc.net/problem/17266문제인하대학교 후문 뒤쪽에는 어두운 굴다리가 있다. 겁쟁이 상빈이는 길이 조금이라도 어둡다면 가지 않는다. 따라서 굴다리로 가면 최단거리로 집까지 갈수 있지만, 굴다리는 어둡기 때문에 빙빙 돌아서 집으로 간다. 안타깝게 여긴 인식이는 굴다리 모든 길 0~N을 밝히게 가로등을 설치해 달라고 인천광역시에 민원을 넣었다. 인천광역시에서 가로등을 설치할 개수 M과 각 가로등의 위치 x들의 결정을 끝냈다. 그리고 각 가로등은 높이만큼 주위를 비출 수 있다. 하지만 갑자기 예산이 부족해진 인천광역시는 가로등의 높이가 높을수록 가격이 비싸지기 때문에 최소한의 높이로 굴다리 모든 길 0~N을 밝히고자 한다. 최소한의 예산이 들 높이를 구하자. 단 가로등..
스프링 @MVC
·
카테고리 없음
MVC 란?mvc는 model, view, controller 계층으로 나누어 하나의 요청을 처리하는 아키텍처입니다. 각 계층은 프레젠테이션 계층의 구성요소 정보를 담은 모델, 그리고 화면 출력 로직을 담은 뷰, 마지막으로 요청을 제어하는 컨트롤러의 역할을 수행합니다.  스프링에서 이러한 mvc 아키텍처를 프론트 컨트롤러 패턴과 함께 사용합니다. 프론트 컨트롤러(front controller) 패턴은 중앙집중현 컨트롤러를 제일 앞에 두어 모든 요청을 이 컨트롤러를 통해 선행하여 처리한 후 적절한 세부 컨트롤러에 작업을 위임해주는 방식입니다. 요청에 공통되는 부분을 프론트 컨트롤러로 처리한 후 적절한 세부 컨트롤러를 찾아 나머지 작업을 부탁하고 이 세부 컨트롤러를 작업을 모든 처리한 후 적절한 뷰를 선택하..
싱글톤 (프로토타입과 스코프)
·
Spring
스프링에서 싱글톤이라는 용어를 흔히 사용합니다. 싱글톤 패턴이란 말그대로 하나만 사용한다고 보시면 됩니다. 추상적이라 생각하실 수 있기에 바로 싱글톤에 대해 알아보겠습니다. 그리고 관련된 프로토타입과 스코프까지 설명해보겠습니다. 싱글톤과 빈 기본적으로 스프링의 빈은 싱글톤으로 만들어집니다. 애플리케이션 컨텍스트마다 빈의 오브젝트는 한 개만 만들어진다는 의미와 같습니다. 스프링에서 이와 같이 빈을 사용하는 이유는 사용자의 요청이 있을 때마다 매번 애플리케이션 로직을 담은 오브젝트를 새로 만드는 건 비효율적이기 때문입니다. 그렇기에 하나의 빈 오브젝트에 동시에 여러 스레드가 접근하는 구조가 됩니다. 이러한 구조에서 고려해야 할 점은 동기화입니다. 멀티쓰레드 환경에서 공유 자원에 경우 해당하는 문제점입니다. ..
IoC 컨테이너란 무엇인가
·
Spring
스프링을 처음 접하게 된다면 IoC 컨테이너에 대한 개념을 이해하고 학습을 진행하는 것이 중요하다고 생각합니다. 스프링의 핵심 기술중 하나로 중요도가 매우 높기 때문입니다. 또한 DI를 이해하기 위해서는 IoC 컨테이너가 선행되어야 합니다. 그래서 이번 글에 IoC 컨테이너에 대해 다루어 보겠습니다. IoC 컨테이너 IoC 컨테이너의 다양한 기능중 가장 기본적인 기능과 역할은 코드를 대신해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리하는 것입니다. 이러한 오브젝트들을 우리는 빈이라고 부릅니다. 이러한 빈들을 컨테이너가 만들고 관리하게 하는 것이 DI를 비롯한 스프링의 주요 기술을 적용하기 위한 조건이 됩니다. 기본적으로 프레임 워크란 프로그램 흐름의 제어를 개발자가 아닌 프레임 워크에게 맡겨 주요 ..
어노테이션이란?
·
Spring
스프링을 사용하여 개발할 때에 @GetMapping, @PostMapping과 같은 어노테이션을 자주 사용하고 볼수 있었습니다. 저는 어떤 상황에서 어떤 어노테이션을 사용해야 하는지 알뿐 왜 사용해야 하고 어노테이션이 어떻게 만들어지는 지는 알지 못하고 사용하였습니다. 한번쯤 관련된 내용을 정리하고자 하여 글을 작성하게 되었습니다. 어노테이션의 등장 기존의 스프링 프레임워크는 IoC를 위하여 xml과 같은 파일을 이용하여 메타정보를 저장하고 이를 활용하여 프로그램을 제어하였습니다. IoC : '제어의 역전'으로 프로그램의 객체 생성, 흐름, 소멸등을 프레임워크에게 권한을 주어 제어할 수 있도록 하는 것을 의미한다. 예를 들어 인터페이스 타입으로 선언한후 프레임워크가 런타임때 적절한 타깃의 타입을 객체로 ..
트랜잭션 어노테이션 (@Transactional, 속성, 정책, 방법)
·
Spring
@트랜잭션 정책 스프링에서는 @Transactional 어노테이션을 통해 포인트 컷과 트랜잭션 속성을 지정할 수 있도록 도와줍니다. 포인트 컷이란? : 공통기능을 적용할 조인 포인트를 선별하는 작업 또는 그 기능을 정의한 모듈 스프링은 @Transactional 어노테이션을 적용할 때 타킷 메소드, 타깃 클래스, 선언 메소드, 선언 타입(클래스, 인터페이스)의 순서에 따라서 적용되어 있는지 차례로 확인하고 가장 먼저 발견되는 속성정보를 사용하게 합니다. 예를 들어 위와 같은 인터페이스와 클래스가 존재할때에 앞서 말한바와 같이 우선순위는 타깃 메소드>타깃 클래스>선언 메소드>선언 타입 이기에 ServiceImpl 클래스에 있는 메소드에 @Transactional이 가장 먼저 적용된후, ServiceImpl..
Mockito 프레임워크 정리(TDD 작성, 테스트 코드 작성)
·
Spring
테스트를 먼저 만들어둔 후 코드를 작성하는 것을 TDD라고 부릅니다. 이렇게 테스트 코드를 먼저 작성해 둔 후 코드를 작성하면 다양한 예외 상황을 고려하고 완전하고 보다 쉽게 코드를 작성할 수 있습니다. 그만큼 테스트 코드는 중요하기에 코드를 작성하면서 테스트는 어떻게 만들 수 있을까를 생각해보는 것은 좋은 습관입니다. 테스트는 단위 테스트와 통합 테스트로 나눌 수 있습니다. 단위테스트는 말그대로 하나의 단위에 초점 맞춘 테스트입니다. 이런 하나의 단위를 테스트 하기위해서 테스트 코드를 작성하다 보면 여러 클래스와 메소드가 의존관계에 얽혀 불필요한 의존 오브젝트를 생성하고 사용하는 경우가 많았습니다. 이러한 번거로운 작업을 없애주기 위해 나온것이 Mockito 프레임워크입니다. 사용방법 1. 인터페이스를..
JAVA Mail을 이용한 메일 발송
·
Spring
서버를 만들다 보면 메일을 인증하거나, 안내 메일을 전송하는 로직이 필요한 경우가 종종 있습니다. 자바에서 메일을 발송할 때는 JavaMail을 사용하면 됩니다. javax.mail 패키지에서 제공하는 자바의 이메일 클래스를 사용하면 다음과 같은 메일 발송 메소드를 만들 수 있습니다. private void sendUpgradeEMail(User user) { Properites props = new Properties(); props.put("mail.smtp.host", "mail.ksug.org"); Session s = Session.getInstance(props, null); MimeMessage message = new MimeMessage(s); try { message.setFrom(ne..
트랜잭션
·
Spring
sql문을 실행했을 때에 몇가지의 로우만 삭제되고 나머지는 안되거나, 일부만 수정되고 나머지 필드는 수정이 안된 채로 실패로 끝나는 경우는 없습니다. 이는 데이터베이스의 ACID 성질을 만족하는 것입니다. 서버에서도 이러한 성질을 요구하는 경우가 있습니다. 계좌이체 작업같은 경우 입금 계좌와 출금 계좌의 변동 총량은 반드시 같아야 하며 이를 보장해줘야 합니다. 하지만 DB의 출금계좌의 상태를 수정하는 것과 입금계좌의 상태를 수정하는 것은 두개의 sql문이 필요합니다. 이렇게 한번에 실행을 보장하는 작업을 트랜잭션이라 말합니다. 앞서 계좌이체 작업 또한 하나의 트랜잭션이 됩니다. 트랜잭션 롤백 : 트랜잭션 안에 한가지의 작업이라도 실패했을 경우 앞서 성공한 작업들 모두 취소하는 작업. 트랜잭션 커밋 : 트..
Memory Management(1)
·
CS
가상 메모리 메모리는 컴퓨터 자원에 있어서 중요한 역할을 하는 H/W입니다. 프로세스가 동작하기 위해서는 메모리에 데이터를 올리고 CPU가 메모리에 접근하여 연산을 하는 방식이므로 메모리의 크기와 성능은 컴퓨팅의 성능과 아주 밀접한 관계가 있습니다. 과거 컴퓨터의 주소 버스(CPU가 메모리나 입출력 장치에 직접적으로 주소를 보낼 때 사용되는 데이터 버스)의 크기가 32비트였기 때문에 메모리의 크기는 4GB로 한정적일 수 밖에 없었습니다. 더보기 ※ 메모리의 단위는 1byte. 즉 주소한칸에 1byte의 데이터가 저장됨. (ex : 0x00000001 => 0001 0001 데이터 저장) 그러므로 표현할 수 있는 주소가 2^32 주소범위라면 주소마다 1바이트이므로 4GB의 메모리 크기가 최대로 표현될 수 ..
돌_멩
여러취미