전체 글 썸네일형 리스트형 토비의 스프링 - 5.5 5장 정리 5.5.1 정리 비즈니스 로직과 데이터 액세스 로직은 분리되어야 함. 또한, 비즈니스 로직 내부에서도 책임과 역할에 따라 메소드로 분리되야 함 인터페이스와 DI를 이용하여 결합도를 낮춰야 함 DAO를 사용하는 비즈니스 로직에는 트랜잭션이 필요함 트랜잭션의 시작과 종료를 지정하는 일을 트랜잭션 경계설정이라 함. 주로 경계설정은 비즈니스 로직에서 많이 발생됨 트랜잭션 정보를 담은 DAO에 전달하는 방법은 매우 비효율적이기 때문에, 스프링이 제공하는 트랜잭션 동기화 방법을 사용하는 것이 편리함 자바에서 사용되는 트랜잭션 API의 종류와 방법은 많음. 트랜잭션 방법이 변경되면 경계설정 코드도 변경돼야 함 트랜잭션 경계설정 코드가 비즈니스 로직 코드에 영향을 주지 않기 위해 스프링이 제공하는 트랜잭션 서비스 추상.. 더보기 토비의 스프링 - 5.4 메일 서비스 추상화 5.4.1 JavaMail을 이용한 메일 발송 기능 새로운 요구사항 등장 레벨 업그레이드된 유저에게 안내 메일을 보내는 기능 추가 DB에 email 필드 추가 UserDao의 userMapper, insert(), update()에 emial 필드 처리 추가 테스트 데이터를 맞게 준비 및 등록, 수정, 조회에서 테스트 코드 수정 💡 앞으로 할 부분에 email 부분을 굳이 필요로 하지 않기 때문에 추가 안할것임 5.4.2 JavaMail 발송 JavaMail을 이용해 메일을 발송하는 전형적인 코드 단순한 예제이므로 한글 인코딩 부분 생략 SMTP 프로토콜을 지원하는 메일 전송 서버가 준비 되었다면 정상적으로 실행될 것임 public class UserService { ... protected void u.. 더보기 프로그래머스 - 이중우선순위큐(Java) 우선순위큐(PriorityQueue) 문제입니다 우선순위큐를 두 번 사용하면 해결할 수 있습니다. 첫 번째 우선순위큐에 값들을 저장시키고, 최소값을 빼내는데 사용합니다.(Java는 최소힙이기 때문에 첫 번째 값을 바로 빼낼 수 있습니다.) 두 번째 우선순위큐는 최소 값을 빼내기 위해 사용합니다. 첫 번째 우선순위큐의 원소들을 차례로 하나씩 빼 두 번째에 저장시켜 최대가 아닌 원소를 저장합니다. 첫 번째 우선순위큐의 최대가 제거되었으면 두 번째 우선순위 큐에 옮겨놓은 원소들을 다시 이동시키면 됩니다. [구현 코드] import java.util.*; class Solution { public static int[] solution(String[] operations) { PriorityQueue pq = .. 더보기 토비의 스프링 - 5.3 서비스 추상화와 단일 책임 원칙 5.3.1 수직, 수평 계층구조와 의존관계 추상화 기법을 이용하면 특정 기술환경에 종속되지 않는 포터블한 코드를 만들 수 있음 UserDao는 데이터 액세스 로직임 UserService는 사용자 관리 업무의 비즈니스 로직임 UserDao와 UserService 분리는 같은 애플리케이션 계층에서의 수평적 분리임 UserDao와 UserService는 인터페이스와 DI를 통해 연결됨으로써 낮은 결합도를 지님 즉, 독립적으로 확장 가능 마찬가지로 UserService와 트랜잭션 기술은 PlatformTransactionManager 인터페이스를 사용했기 때문에 독립적인 코드임 단, UserService와 PlatformTransactionManager는 로우 계층의 수직적 분리임 하지만, DI를 통한 수평적,.. 더보기 토비의 스프링 - 5.2 트랜잭션 서비스 추상화 5.2.1 모 아니면 도 레벨 업그레이드 도중 문제가 발생하면 이전에 업그레이드 된 것은 초기화 되는가? 일부 사용자가 차별성을 느끼기 때문에 업그레이드 도중 실패 시, 초기화 하는게 옳음 짧은 업그레이드 시간 중간에 DB 서버를 다운시키거나 네트워크에 장애 발생하는 것은 불가능 하며, 테스트는 자동화되야 하므로 예외가 발생하는 상황을 의도적으로 만들 것임 예외를 강제로 발생시킬 때 애플리케이션 코드를 수정하는 것은 좋지 않음 기존의 UserService 내부에 UserService를 상속한 테스트용 확장 static 클래스를 만들어 사용 현재 두 번째와 네 번째 사용자가 레벨 업그레이드 되므로, 네 번째 사용자 처리하는 중에 예외 발생할 것임 upgradeLevel() 메소드 오버라이드를 통해 네 번째.. 더보기 백준 - 10282 해킹(Java) https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 다익스트라 문제입니다. 의존성이 주어질 때, 해킹당한 컴퓨터가 몇대의 컴퓨터를 감염 시키는지와 그에 걸리는 시간을 구하는 문제입니다. 각 테스트 케이스마다 시작점이 주어지고, (최소)시간을 구해야 하기 때문에 다익스트라라는 것을 알 수 있습니다. 다익스트라의 시간 복잡도는 O(VlogV + ElogV)입니다. 문제에서 최대 V의 개수는 10,000입니다. 또, 최대 E의 개수는 100,000입니다. .. 더보기 토비의 스프링 - 5.1 서비스 추상화 5.1.1 사용자 레벨 관리 기능 추가 UserDao는 CRUD를 제외하고 어떤 비즈니스 로직을 갖지 않음 사용자 관리 모듈 기능 추가 정기적으로 유저의 활용 내용을 참조해서 레벨을 조정 비즈니스 로직 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나 처음 가입자면 BASIC. 활동에 따라 한 단계씩 업그레이드 가입후 50회 이상 로그인 하면 BASIC → SILVER SILVER 이면서 30번 이상 추천을 받으면 GOLD 레벨 변경 작업은 일정 주기를 가지고 일괄적으로 진행 5.1.2 정수형 상수 값의 사용자 레벨 각 레벨을 코드화 해서 숫자로 넣음 public class User { ... int level; private static final int BASIC = 1; priv.. 더보기 토비의 스프링 - 4.3 4장 정리 4.3.1 정리 예외를 잡아서 아무런 조취를 취하지 않거나, 의미 없는 throws 선언을 남발하는 것은 위험함 예외는 복구, 전달, 전환해야 함 의미 있는 예외로 변경하거나, 불필요한 catch/throws를 피할 두 가지 방법의 예외 전환(중첩 예외, 예외 포장)이 있음 복구할 수 없는 예외는 런타임 예외로 전환하는 것이 바람직함 애플리케이션 로직을 담기 위한 예외는 체크 예외로 만듦 JDBC의 SQLEception은 복구할 수 없는 예외이므로 런타임 예외로 포장 SQLException의 에러 코드는 DB에 종속되기 때문에 DB 에 독립적인 예외로 전환될 필요성이 있음 스프링은 DataAccessException을 통해 DB에 독립적으로 적용 가능한 추상화 런타임 예외 계층을 제공 DAO를 데이터 액.. 더보기 이전 1 ··· 26 27 28 29 30 31 32 ··· 48 다음