분류 전체보기(250)
-
백준 1759: 암호 만들기 [Java] - 포포
문제 바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다. 암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있는 암호이지만 bac는 그렇지 않다. 새 보안 시스템에서 조교들이 암호로 사용했을 법한 문자의 종류는 C가지가 있다고 한다. 이 알파벳을 입수한 민식, 영..
2022.07.07 -
[토비의 스프링 3.1] 3.3 JDBC 전략 패턴의 최적화
이전 장(3.2)에서는 전략 패턴을 사용해서 변하는 부분과 그렇지 않은 부분을 깔끔하게 분리했다. public void deleteAll() throws SQLException { StatementStrategy strategy = new DeleteAllStatement(); // 선정한 전략 클래스의 오브젝트 생성 jdbcContextWithStatementStrategy(strategy); // 컨텍스트 호출, 전략 오브젝트 전달 } 클라이언트 코드에서 구체적인 전략을 정하고, 컨텍스트에 그 전략을 파라미터로 전달해주었다. 컨텍스트도 jdbcContextWithStatementStrategy라는 메소드로 분리하였더니 다른 DAO에서도 PreparedStatement를 실행하는 JDBC의 공통 작업 ..
2022.07.07 -
@Profile 어노테이션
1) 로컬에서 애플리케이션을 실행할 때 2) 테스트를 실행할 때 3) 실제 운영을 위해 배포할 때 위의 세가지 경우에서 각각 다른 설정을 사용하고 싶고, 해당 설정에 맞는 Bean을 사용하고 싶은 경우 @Profile 어노테이션을 사용하면 좋다. 스프링은 프로필(@Profile)을 통해 런타임 환경을 설정할 수 있는 기능을 제공한다. 파일을 여러 개로 분리하는 대신에 빈 구성이 달라지는 내용을 프로필로 정의해서 만들어두고, 실행 시점(런타임)에 어떤 프로필의 빈 설정을 사용할 지 지정할 수 있는 것이다. 먼저, application.properties 설정파일을 한번 살펴보자. 하나는 java 패키지의 설정파일로, 1번 경우에 해당한다. 아래는 test 패키지 하위에 있는 application.prope..
2022.07.06 -
[토비의 스프링 3.1] 3.2 변하는 것과 변하지 않는 것
3.2.1 JDBC try/catch/finally 코드의 문제점 바로 이전 장에서는 try/catch/finally 블록을 적용해서 완성도 높은 UserDao를 작성했지만, 여전히 복잡한 것은 사실이다. try/catch/finally 블록이 2중으로 중첩되어 나오며(finally 블록에서 리소스 반환할 때에도 try/catch/finally가 한번 더 사용된다), 모든 메소드에서 try/catch/finally 블록이 반복된다. 만약 finally 블록에서 커넥션을 닫아주는 메소드를 생략한 경우에는, 테스트에 별 문제 없어보여도 애플리케이션을 운영하던 중에 서버에서 리소스가 꽉 찼다는 에러가 발생하며 서비스가 중단될 것이다. 이런 DAO는 폭탄이 될 가능성을 지니고 있다. 이 경우에는 변하지 않는, ..
2022.07.06 -
백준 15663: N과 M (9)
문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수 중에서 M개를 고른 수열 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 ..
2022.07.05 -
[DB 접근 기술] 스프링과 문제 해결 - 예외 처리, 반복
체크 예외와 인터페이스 서비스 계층은 가급적이면 순수한 비즈니스 코드만 남겨놓는 것이 바람직하다. 하지만 DB 접근 기술이(예를 들면 JDBC의 SQLException) 리포지토리, 서비스, 컨트롤러에서 처리할 수 없는 체크예외를 던지는 경우라면 서비스, 컨트롤러는 해당 DB 접근 기술에 종속된다. 체크 예외는 메소드 선언에 throw가 필수로 선언되어야 하기 때문이다. 따라서 DB 접근 기술이 JPA로 변경되는 경우 throws SQLException을 다른 exception으로 변경해야 하는 수고가 있다. 우선 인터페이스를 도입해서 DB 접근 기술의 변경이 용이하도록 해보자. MemberRepository를 인터페이스로 지정하면, 서비스 계층은 MemberRepository 인터페이스에만 의존하면 된..
2022.07.05