본문 바로가기

모면9

프론트엔드는 TDD가 필수인 것 같다 백엔드 준비하는 사람이 프론트엔드 종아리까지 담가본 후 느끼는 바이다. 프론트엔드야 말로 테스트 없이는 효율적인 코딩이 불가능한 것 같다. 프론트 개발하면서 고민이 컴포넌트 밑 컴포넌트 밑 컴포넌트의 state 변경 이벤트가 잘 작동되는지 확인하는 것이다. API로 데이터 호출해서 컴포넌트에 잘 띄워지는지 등등... 비즈니스 로직이 막 대단한 것도 아닌데 결합도가 높다고 해야 하나? 백엔드는 실행 비용이 그렇게 크지 않아서 테스트의 중요성을 못느꼈는데, 프론트엔드는 실행이 좀 많이 무겁다... 그리고 API 호출 할 수가 없잖아... 인가 기능도 해놔서 쿠키 설정도 해야 되는데... 맞아요... 지금 Mockito 이용해서 Mock API 호출 후 위젯에 잘 보여지는지 테스트 하고 있는데 계속 오류가 나.. 2023. 4. 11.
[Spring Boot] 테스트 코드에서 프로퍼티 NullPointerException 오류 해결 @Service public class TokenService { @Value("${secret}") private String secretKey; public String generateJWT(MemberInfoDto info) { // ... Jwts.builder() .setHeader(headers) .setClaims(payloads) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + 60 * 1000 * 60)) .signWith(SignatureAlgorithm.HS256, secretKey.getBytes()) .compact(); } //... } 토큰 .. 2023. 4. 6.
[Spring Boot] 개인 정보가 담긴 Jwt 토큰 발급 후 Cookie로 반환하기 oAuthService에 Jwt 토큰을 발급하는 메서드를 추가했다. public String generateJwtToken(MemberInfoDto info) { Map payloads = new HashMap(); Map headers = new HashMap(); headers.put("alg", "HS256"); headers.put("typ", "JWT"); payloads.put("name",info.getName()); payloads.put("picture", info.getPicture()); payloads.put("oauthId",info.getSub()); return Jwts.builder() .setHeader(headers) .setClaims(payloads) .setIssue.. 2023. 4. 4.
[Spring Boot] Security 없이 OAuth2 Google에서 받은 id_token 사용해 회원 정보 저장하기 2023.03.27 - [Project/모면] - [Spring Boot] Security 없이 OAuth2로 Google 로그인 구현, 유저 정보 얻기 이전 시간에 access_token을 발급받아오는 작업까지 마쳤다. 이제 id_token 안의 정보를 복호해 으로 만들어버리자. 먼저 RestTemplate을 이용해 POST 요청을 보내는 코드를 수정했다. ResponseEntity responseEntity = restTemplate .postForEntity(GOOGLE_TOKEN_URL, params, GoogleOAuthResponseDto.class); package com.momyeon.backend.dto; import lombok.AccessLevel; import lombok.Gette.. 2023. 4. 3.
[Spring Boot] 면접 질문 카테고리 분류하기 대분류 public enum Division { COMMON("공통"), TECH("기술"), EXPERIENCE("경험"), FIT("인성"), ; private String korTitle; Division(String korTitle) { this.korTitle = korTitle; } } 소분류 public enum SubDivision { MOTIVATION("지원동기", Division.COMMON), INTRODUCTION("자기소개", Division.COMMON), NETWORK("네트워크", Division.TECH), ALGORITHM("알고리즘", Division.TECH), OPERATING_SYSTEM("운영체제", Division.TECH), DATABASE("데이터베이스",.. 2023. 4. 1.
[Flutter / Dart] Flutter로 REST API 호출하기 먼저 플러터에서 HTTP API를 호출하기 위해 패키지를 설치해야 한다. flutter pub add http flutter pub add test​ 나는 테스트 코드에서 실행시킬 거라 test 패키지도 설치했다. 정확히는 Dart 언어로 Api 호출하는 방법이다. 참고로 아래의 웹 사이트를 이용해 JSON 호출을 할 거다! https://jsonplaceholder.typicode.com/ JSONPlaceholder - Free Fake REST API {JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. Serving ~2 billion requests ea.. 2023. 3. 26.
[Dart] dart 기본 | 자료형, JSON, stream 자료형 구분 자료형 설명 숫자 int 정수형 숫자 double 실수형 숫자 num 정수형 또는 실수형 숫자 문자열 String 텍스트 기반 문자 불리언 bool True나 False 자료형 추론 var 입력받은 값에 따라 자료형 결정. 한 번 결정된 자료형은 변경 불가 dynamic 입력받은 값에 따라 자료형 결정. 다른 변수 입력하면 자료형 변경 가능 Null safety 자료형 다음 ?를 붙이면 Null이 가능하고 붙이지 않으면 Null이 불가능하다. 그리고 식 다음 !를 붙이면 Null이 아님을 직접 표시할 수 있다. JSON 인코딩, 디코딩 jsonDecode()를 사용하면 String을 Map 객체로 변환한다. jsonEncode()를 사용해 Map 객체를 String 타입의 JSON으로 변환한.. 2023. 3. 25.
[Flutter] Future와 async/await Future 클래스란 크게 두 가지 상태를 갖고 있다. 완료와 미완료 상태. 완료됐을 때 두 가지 결과를 기대한다. 바로 'data'와 'error' 이다. Future future = futureNumber(); future.then((val) { // int가 나오면 해당 값을 출력 print('val: $val'); }).catchError((error) { // error가 해당 에러를 출력 print('error: $error'); }); 위처럼 then과 catchError 메서드를 이용해 결과의 분기를 구분한다. async, await는 대표적인 비동기 관련 키워드이다. async는 함수를 비동기 함수로 만들어 준다. await를 사용하면 비동기 함수가 끝날 때까지 기다리고, 사용하지 않으면.. 2023. 3. 19.