분류 전체보기 439

CI / CD 환경

왜 리눅스에 배포할까? 윈도우는 라이센스가 있기 때문에 비싸다. 윈도우도 서버있다! IIS 대신 배포 환경으로 사용하면 비용이 발생한다. 나는 윈도우에서 개발하고 리눅스에 던져서 배포할건데 테스트 코드를 안짰어. 포스트맨으로 테스트해보겠지. 그럼 오래 걸릴거야, 하나하나 body 데이터 넣고 눈으로 보고. 그리고 이걸 .jar파일로 만들어서 리눅스에 던져. 이때 리눅스에 jdk가 설치되어 있어야 하고, 받은 .jar 파일을 실행하면 되는데 폴더 경로도 다르고 환경도 다르기 때문에 리눅스에 던질 때 오류날 수 있어. 근데 로그를 안남기면 뭐가 잘못된지 모르니까 뇌절온다? 실제 서버에서는 출력으로만 남고 허공으로 사라지니까 내가 확인할 방법이 없지. 프로젝트가 실행되고 발생하는 에러를 OS는 에러로 보지않고..

Spring/Tistory 2022.06.02

블로그-V3. Log4j

GlobalExceptionHandler은 클라이언트에게 보여주는 로그이지, 파일로 남진 않는다. 모니터 출력만 해준다. stdout(표준(모니터) 출력) 모니터 출력 stdout(표준(모니터) 출력) 키보드 입력 stdin(표준(키보드) 입력) 내가 GUI에서 마우스 클릭을 해도 실제로는 명령어가 실행된다. 에러 stderr(표준 에러) 키보드로 표준 입력을 했을 때 2가지 결과가 나올 수 있다. 표준 출력 혹은 표준 에러 stdout, stdin, stderr는 OS가 들고있는 기능이다. 자바에서 이 기능을 사용하고 싶다면 system call해서 사용한다. System.in → 표준 입력 System.out → 표준 출력 1 (디폴트) System.err → 표준 에러 2 이게 OS의 기능을 sys..

Spring/Tistory 2022.06.02

JUnit5 컨트롤러 통합 테스트

왜 컨트롤러는 통합 테스트 하는 게 좋을까? 통합테스트 장점 : 분리해서 처리하지 않으니까 찝찝함이 줄어든다. → 프로젝트 전체 테스트 가능 (= 실제 테스트) 이것도 Mockito로 처리하면 가짜 테스트이다. 다 띄우는게 좋다. MSA 도메인별로 서버 분리 MSA 설계 시 테스트할때 C를 때린 결과를 토대로 A 테스트를 할 때가 있는데, 이때 TestRestTemplate를 많이 사용한다. 모크로는 불가능하다. 모크는 자기 서버를 테스트 하는것이지 다른 서버는 테스트하지 못한다. 컨트롤러는 웬만하면 그냥 통합 테스트하자. 진짜 개큰회사에서는 WebMvcTest로 하지만 우린 그냥 통합 테스트하자. 포스트맨 사용할 필요없이 테스트 가능 근데 포스트맨 사용안할 수가 없어. 테스트 다 통과해도 눈으로 검증이..

Spring 2022.06.02

복습) 추상화

프로그램을 만들 때 처음부터 추상화된것부터 생각하기는 어렵다. 구체적인것부터 올라가며 추상화시켜야한다. ___________ 의존성 주입 ? 나는 A가 필요한데 A는 B가 필요하다. 이때 알아서 다 필요한걸 DI를 해줘서 내가 신경쓸 필요가 없다. 라이브러리는 모두 DI이다. gradle이나 maven이 없으면, 의존성 관리 도구가 없으면 너무너무 힘들다. 라이브러리 관리하기가 !! 이걸 사용하면 필요한 라이브러리만 가져오면 애들이 다 갖다준다. DI가 왜좋냐. 생성자 주입을 해주니까. 필요한거있으면 다 주입해준다. pip도 똑같고 npm 똑같고 라이브러리 관리 도구는 모두 DI 방식이다. 엄청 편하다. 다 똑같음 ! DI의 특징 : 라이브러리를 가지고있는 컨테이너가 필요하다. IoC도 똑같은 개념이다...

JAVA 2022.05.31

Dart 클래스

class Dog { // 생성자로 값이 들어올 수도 있고, 안들어올 수도 있으니 null이 될 수도 있겠네 "?" // private로 만들고싶을 때 필드명 앞에 "_" 붙이기 String? _name; int? _age; // 생성자 Dog (this._name, this._age); String? getName () => _name; int? getAge () => _age; } void main() { Dog d = Dog("레르코", 10); } Function을 담을 때는 메서드 자체를 담기때문에 Function aaa = () => "hello"; 이렇게 사용하는데 변수를 담을 때는 int a () => 2; 이렇게 담아준다. 다트는 오버로딩이 안된다. 대신 파이썬처럼 선택적 매개변수를 사용..

Dart 2022.05.31

Dart 람다식, 익명함수

// 익명함수 // Function 타입 hello에 함수를 담음 Function hello = () { return "Hello Everyone"; }; // 모든 타입 다 받을 수 있어서 가능 (정확한 타입 : Function 타입 고정!) // 타입을 확실히 알 때는 var 쓰지말자! var hello2 = () { return "Hello Everyone"; }; // 타입 변환 가능 dynamic hello3 = () { return "Hello Everyone"; }; void main() { print(hello); } 이렇게는 못쓴다 Function bye() { } 람다는 expression의 꾸러미 짧은 함수 리턴을 무조건 함 화살표함수 내부를 무조건 리턴 // 람다식 expressio..

Dart 2022.05.31

JUnit5 컨트롤러 @WebMvcTest

이전에 서비스 테스트할때는 얘를 모키토 영역에 띄웠기 때문에 상관없었는데 컨트롤러 테스트할 때는 @WebMvcTest가 진짜 컨트롤러를 띄웠기 때문에 IoC 컨테이너에 뜨게된다. 컨트롤러가 의존하고있는 것이 서비스인데, 그러면 스프링이 IoC 컨테이너에서 서비스를 찾게된다. 그래서 모크 서비스를 IoC에 등록해야하는데 이때 붙여주는 어노테이션이 @MockBean이다. 사실 빈건 아닌데 비어있는 bean이라고 나온다. getter가 없기 때문에 찾지 못하는것이다. 직접 getter를 만들어봤다. 아 얘가 getter를 때려서 자바 오브젝트를 json으로 변환하는구나. 그럼 getter의 이름에 대소문자를 구분하지 않아볼까? 오 때려지네? get을 때리는데 대소문자는 구분하지 않네! 그럼 소문자 겟셋터도 있..

Spring/Tistory 2022.05.31

JUnit5 컨트롤러 테스트 환경

http 상태코드 정상 : 200 insert : 201 서버에러 : 500 클라이언트 요청잘못 : 400 인증안됨 : 403 컨트롤러를 테스트하는 방법은 여러가지가 있다. 1. 실제환경과 동일하게 테스트할 수 있다. @SpringbootTest 어노테이션을 달아주면 전체가 메모리에 떠서 통합 테스트가 가능하다. 사실 컨트롤러에서 통합테스트 해버리면 테스트는 끝이다. 클라이언트가 요청할 수 있는곳은 컨트롤러밖에 없으니까! 2. 내가 원하는 컨트롤러, 서비스, 레파지토리만 분리해서 메모리에 올리고 테스트할 수 있다. @SpringbootTest(class={BookApiController.class, BookService.class, BookRepository.class}) 내가 BookService를 테..

Spring 2022.05.31

복습) 메모리, 스택 오버 플로우, 재귀 함수, 상태는 행위로 변경

이클립스 설정 utf-8 설정 요새 기본 데이터베이스 세팅은 utf-8이 아닌 utf-8mb4이다. 얘는 이모지도 사용이 가능하다. 이모지는 그림이 아닌 글자이다. 회사에서 자바버전 11을 쓴다면 flux를 쓴다는 것이다. flux -> 서드파티 라이브러리 (외부 라이브러리)가 인기가 많아서 표준이 되었다. -> 1.9 flux : 구독과 출판기술을 구현하게 해주는 라이브러리 구독과 출판? A 신문사는 출판을 한다. 스포츠를 할수도있고 음악을 할수도있고 게임을할수도있잖아. 그러면 구독자들은 신문사의 게임만 구독하면 게임이 딱 insert 됐으니까 모든 게임을 구독하고있는사람한테 push해주는 기능 보통 SSE response 선이 유지되어있지 않으면 못해준다. 외부 라이브러리 사용하고싶으면 다운받아서 빌..

JAVA 2022.05.30