전체 글 26

[토비의 스프링vol.1 6장] AOP - 1

AOP-1 정리 노션 페이지 AOP 적용 대상 : 선언적 트랜잭션 6.1 트랜잭션 코드의 분리 6.1.1 메소드 분리 비즈니스 로직과 트랜잭션 경계설정은 완벽하게 독립적 트랙잭션의 시작과 종료 사이에 비즈니스 로직이 실행되는 조건만 지키면 됨 → 비즈니스 로직을 담당하는 코드를 메소드로 추출해서 독립 6.1.2 DI를 사용한 클래스의 분리 비즈니스 로직 분리 but 트랜잭션 담당 코드가 여전히 서비스 안에 있음 DI 의 기본 아이디어 : 실제 사용할 오브젝트의 클래스 정체는 감추고 인터페이스 통해 간접 접근 → 이로 인해 구현 클래스를 외부에서 자유롭게 변경 가능 인터페이스 이용해 구현 클래스 클라이언트에 노출하지 않고 런타임 시에 DI를 통해 적용하는 방법을 쓰는 이유 → 구현 클래스를 상황에 따라 바..

[토비의 스프링vol.1 5장] 서비스 추상화

5장 서비스 추상화 트랜잭션 서비스 추상화 작업 중 예외가 발생해 완료 되지 않았다면 ? -> 작업이 시작되지 않은 것처럼 초기 상태로 되돌려 놓아야한다. 이것이 트랜잭션이다. 트랜잭션 : 더 이상 나눌 수 없는 단위 작업 (원자성) 트랜잭션 경계 설정 트랜잭션 롤백 : 취소 작업 트랜잭션 커밋 : 작업 확정시킴 트랜잭션 경계 : 트랙잭션이 시작되고 끝나는 위치 롤백을 위해서는 여러 개의 작업을 1개의 트랜잭션으로 관리 해야 함 트랜잭션 동기화 JDBC 기준, 트랜잭션 유지하려면 시작-끝까지 같은 Connection 유지 -> Connection 파라미터로 전달하면 데이터 엑세스 기술에 독립적 X -> JPA 등으로 구현 방식 변경하면 인터페이스 DAO 다 수정해야함(DI 적용 안 되는 것) -> 동기화..

[토비의 스프링vol.1 4장] 예외처리

예외의 종류와 특징 체크예외 : 명시적인 처리가 필요한 예외, throw를 통해 발생시킬 수 있는 예외 = 일반적인 예외 Error java.lang.Error 클래스의 서브클래스 시스템에 비정상적인 상황이 발생했을 경우(VM에서 발생시키는 것, 애플리케이션 코드 X) 애플리케이션에서는 이런 에러에 대한 처리는 신경 쓰지 않아도 됨 Exception 애플리케이션 코드 작업 중에 예외상황이 발생했을 경우 체크 예외 RuntimeException 클래스 상속 X 언체크 예외 = 런타임 예외 RuntimeException 클래스 상속 O - 특별하게 다룸 명시적인 예외처리 X (catch로 잡거나 throws 선언 안 해도 됨) NullPointerException, IllegalArgumentExceptio..

[MongoDB] 서버 옮겨서 데이터 이관하기

DSGM의 AWS EC2 기간이 끝나서 인스턴스를 옮겨야 했다. MongoDB도 EC2에 설치해서 사용했기 때문에, DB도 서버를 옮겨야 하는 상황이었다. 이전 MongoDB 에서 데이터를 추출한 다음 새로 설치한 MongoDB에 그대로 이관하는 명령어 데이터 추출은 mongodump로 한다. mongodump --uri mongodb://관리자id:관리자pwd@ip:20717 --db admin --out DSGMdata DSGMdata라는 파일 이름으로 데이터를 추출했다. mongorestore --host 이관할 서버 --port 포트번호 -u 관리자아이디 -p 관리자비번 --db 이관할데이터베이스 ~/DSGMdata/admin 새로 옮긴 서버에서 데이터를 이관할 명령어는 mongostore 이관할..

이것저것 2023.04.03

[토비의 스프링vol.1 3장] 템플릿

3장 템플릿 개방 폐쇄 원칙: 확장에는 자유롭게 열려 있고 변경에는 굳게 닫혀있다. 템플릿 : 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있는 방법이다. 분리와 재사용을 위한 디자인 패턴 적용 내부 클래스 클래스 분리와 DI 템플릿과 콜백 정리 예외처리 예외처리 필요성 : 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환해야 한다. try/catch/finally 코드의 복잡도가 너무 높다. 모든 메소드마다 반복된다. 분리와 재사용을 위한 디자인 패턴 적용 변하는 부분을 변하지 않는 나머지 코드에서 분리 변하는 부분 : 쿼리 수행 변하지 않는 부분 : try/cat..

[Python] input, print vs sys.stdin.readline, sys.stdout.write 차이점

sys 모듈 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈 버퍼(buffer) 표준 입출력 함수를 사용할 때 버퍼(buffer) 라는 임시 메모리 공간을 사용 prompt 메시지 개행 문자(줄바꿈) 속도 메모리 input 메시지 O 삭제 느림 큼 sys.stdin.readline 메시지 X 포함 빠름 작음 input() 값을 하나하나 입력할 때마다 버퍼에 저장함 개행문자 \n 이 입력되면 버퍼 저장 종료 파라미터로 prompt 메시지 받을 수 있어서 입력 받기 전 출력 sys.stdin.readline() 입력 크기를 제한하여 사이즈를 지정하여 입력 받을 수 있음 내장함수인 input과 달리 file object 이므로, 사용자의 입력만을 받는 buffer 를 만들어서 그 ..

programming 2022.10.08

[토비의 스프링vol.1 2장] 테스트

2장 테스트 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있게 자신감을 주는 기술 웹을 통한 DAO 테스트 방법의 문제점 서비스 클래스, 컨트롤러, JSP 뷰 등 모든 레이어의 기능을 다 만든 후에야 테스트가 가능 에러 메시지와 호출 스택 정보만으로 원인 찾기 힘듦 DAO를 테스트 하려고 만든 다른 레이어의 코드 때문에 에러가 날 수 있음 테스트 하고 싶은 대상에 다른 계층의 코드, 컴포넌트 서버의 설정 상태가 모두 영향을 줌 작은 단위의 테스트 가능한 작은 단위로 쪼개서 집중 -> 관심사의 원리 적용 UserDaoTest 를 수행할 때 웹 인터페이스, 이를 위한 MVC 클래스, 서비스 오브젝트, 서버 배포 필요가 없음 -> 단위 테스트(Unit Test) 통제할 수 없는 외부의 ..

[토비의 스프링vol.1 1장] 오브젝트와 의존관계

1장 오브젝트와 의존관계 스프링은 객체지향 프로그래밍을 추구한다. 그렇다면, 스프링이 집중하는 오브젝트를 먼저 이해해야 한다. 1장에서는 UserDao 클래스를 만들고, 코드를 객체지향에 충실한 코드로 리팩토링 하며 오브젝트와 의존관계에 대해 이해한다. 1.1 초난감 DAD DAO(Data Access Object) : DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 자바빈 : 다음 두 가지 관례를 따라 만들어진 오브젝트 디폴트 생성자: 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문에 필요하다. 프로퍼티: 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 ..

CPU Time

컴퓨터의 성능을 말할 때 2가지의 기준이 있다. 1. Response Time 하나의 작업이 끝날 때까지 걸리는 시간, 즉 응답시간이다. 따라서 Response Time은 요청이 온 순서대로 작업을 끝내면 좋아진다. 2. Throughput 정해진 시간 간격 안에 얼마나 많은 일을 하는지, 즉 처리량이다. Response Time이 짧은 작업부터 하면 좋아진다. 응답시간과 처리량은 서로 어떤 영향이 있는가? - 빠른 CPU로 교체했을 때 : Response Time 감소, Throughput이 증가 - CPU를 추가했을 때 : Response Time에는 변화 X, Throughput 증가 -> Response time에 따라서 Throughput은 영향이 있지만, Throughput에 ResponseT..

기기구조 2022.03.21

[까막noon] DND 6기 활동 후기 & ios 앱 프로젝트 회고

프로젝트 내용 까막noon 글쓰기 루틴화를 위한 글쓰기 어플리케이션 팀원 개발4(프론트2,백2) / 디자인 2 전체 프로젝트 기간 2022.01.05 ~ 2022.02.27 개발 기간 2022.01.15 ~ 2022.02.27 (와이어프레임이 나오고 본격적인 개발은 1월 28일부터 시작했다. 약 4주가량 기능개발을 한 것 같다.) 아키텍처 및 기술스택 클라이언트 - Swift 백 - NestJS, MongoDB, Mongoose 협업 툴 Figma, Notion, Swagger 구현 API 챌린지 API 매일 자정 12시에 새로운 키워드를 업데이트 유저가 진행중인 챌린지 현황 조회 키워드에 대한 글쓰기 기능 구현 키워드로 글을 썼을 때, 스탬프 증가 (스탬프는 하루에 한 개만 찍힘) 나의 글 API 유저..

프로젝트 회고 2022.03.01