에러 상황 @FeignClient public interface SomeApi{ @PostMapping("/my/test", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) void postSomthing( @RequestPart MultipartFile uploadFiles, @RequestPart MyDto myDto ); } 상황은 위와 같이 Multipart/form-data를 MultipartFile 하나와 내가 정의한 Dto 하나를 파라미터로 전송하는 것이였다. 구글링을 통해 @RequestBody나 @RequestParam 대신 @RequestPart를 사용하면 된다는 정보를 얻고 위와 같이 코드를 작성하였다. 그런데 아래와 같은 에러가 발생했다. "Re..
코드연구소를 시작한 계기 안녕하세요. 코드연구소의 연구소장입니다. 제가 이 블로그를 시작한건 2021년이였습니다. 당시 대학생 신분으로 학과에서 배운 내용을 복습하고 기록하기 위해 기술블로그를 시작했습니다. 처음엔 자료구조, 알고리즘과 같은 CS 기초 지식에 대해서만 다루었는데, 백엔드 개발자를 꿈꾸면서 점차 웹에 관련된 기술들도 작성하게 되었습니다. 코드연구소 이름의 의미 기술 블로그를 시작하면서 가장 먼저 고민한 것은 블로그의 이름이였습니다. 기술 블로그의 정체성을 살리면서 간결한 이름을 원했고, 결국 코드연구소라는 이름을 짓게 되었습니다. 아직은 기초적인 내용들만 작성하지만 실력이 충분히 성장한다면 여러 코드를 연구하는 컨텐츠를 작성해보고 싶습니다. 프로필 사진 코드연구소의 프로필사진은 그림을 잘 ..
@RequestParam 어노테이션 @RequestParam 어노테이션은 주로 HTTP 요청의 파라미터를 읽어 메서드의 매개변수에 바인딩할 때 사용한다. 예를 들어 https://www.code-lab1/v1/board?page=1&pageSize=10 위와 같이 API 호출을 한다고 하자. @GetMapping("/v1/board") public ResponseDto getBoardList( @RequestParam(value="page") Integer page, @RequestParam(value="pageSize") Integer pageSize){ System.out.println(page + ", " + pageSize);// 1, 10 } @RequestParam 어노테이션은 value 속성..
&& 연산자 && 연산자는 논리적 AND 연산자이다. 모든 피연산자가 true 일 때 해당 피연산자의 집합이 true가 된다. if( someFlag && otherFlag ){ // ... } 다른 프로그래밍 언어를 먼저 접한 사람이라면 && 연산자를 위와 같이 단순히 논리연산자로만 사용할 것이다. 하지만 자바스크립트에서 && 연산자는 단순히 논리연산자로만 사용되지 않는다. test = false && true // false test = "" && "test" // "" test = 12 && 4 // 4 test = 12 && 4 && 2 // 2 && 연산자는 피연산자를 왼쪽부터 평가하면서 첫 falsy(거짓 같은 값) 피연산자를 만나면 바로 해당 피연산자의 값을 반환한다. 만약 모든 값이 tru..
옵셔널 체이닝(optional chaining)이란? 옵셔널 체이닝은 '?.' 형태의 특별한 문법구조체의 사용을 뜻하는데, 이것을 이용하면 프로퍼티(property)가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있다. 다만 옵셔널 체이닝은 자바스크립트 스펙에 추가된 지 얼마 되지 않았기 때문에 구식 브라우저는 폴리필이 필요하다. 옵셔널 체이닝의 등장 배경 const student = {} 위와 같이 비어있는 student라는 객체의 프로퍼티에 접근하려고 하면 어떻게 될까? alert(student.name.lastName); // TypeError: Cannot read property 'lastName' of undefined 당연히 오류가 발생하게 된다. 실제로 어떤 객체의 프로퍼티가 비어있는 ..
nullish 병합 연산자 다른 프로그래밍 언어를 사용하다 자바스크립트를 사용하면 특이한 연산자가 보인다. alert(name ?? '홍길동' ); 위와 같이 자바스크립트에는 '??' 연산자가 존재한다. 이건 nullish 병합 연산자라고 하는데, 앞의 피연산자가 null 혹은 undefined라면 뒤 피연산자를 반환하고, 그렇지 않다면 앞의 피연산자를 반환한다. 예를 들어 let a = null; let x = a ?? b;// x = b 위와 같이 a ?? b와 같은 식에서 a가 null 혹은 undefined라면 뒤 b를 반환하고, 그렇지 않다면 a를 반환한다. x = (a !== null && a !== undefined) ? a : b; '??' 연산자와 위 코드는 같은 동작을 한다. 즉 위와 ..
typeof란? typeof는 피연산자의 데이터 타입을 반환하는 연산자이다. 하나의 피연산자를 오른쪽에 두며 피연산자의 원시 타입(primitive type)을 string 형태로 반환한다. 예를 들어 위와 같이 string 타입 변수를 피연산자로 받으면 'string'을 반환한다. typeof가 반환하는 값은 다음과 같다. 'boolean' : 불리언 'number' : 숫자 'string' : 문자열 'object' : 객체 'function' : 함수 'undefined' : undefined 'symbol' : ES6부터 추가된 Symbol 타입 typeof를 사용하는 다양한 예시를 보자. 특이한 경우 몇 개만 짚어보겠다. { }는 객체기 때문에 'object'를 반환한다. 또한 배열인 [ ] 도..
undefined란? undefined는 자바스크립트의 원시 값(primitive type) 중 하나로, 값을 할당하지 않은 변수는 모두 undefined 자료형이다. 또한 메서드나 선언에서 평가할 변수가 값을 할당받지 않은 경우, 값이 주어지지 않은 인수(parameter), 함수가 값을 명시적으로 반환하지 않는 경우에도 undefined를 반환한다. typeof undefined의 결과는 'undefined'이다. let x; if( x === undefined) { // 실행 O }else{ // 실행 X } null이란? null은 자바스크립트의 원시 값(primitive type) 중 하나로, 어떤 값이 의도적으로 비어있음을 표현한다. null 값은 참조 변수에(reference variable..
var 변수란? 자바스크립트에서 var은 변수를 선언하는 키워드이다. var의 특징은 다음과 같다. 1. var의 scope var은 함수 외부에서 선언되면 전역 변수로 취급된다. 반면, 함수 내에서 선언하면 함수 내에서만 접근이 가능하다. var name = 'code-lab1';// 전역변수 function funcA(){ var hi = 'hi'; console.log(name); // code-lab1 출력 console.log(hi); // hi 출력 } console.log(name); // code-lab1 출력 console.log(hi);// error: hi is not defined 예를 들어 위 코드에서 name은 전역 변수로써 코드 어디서든 접근이 가능하다. 하지만 funcA()에..
쉘(Shell)이란? 쉘은 운영체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다.(참고1) Shell은 껍데기를 뜻하는 영단어인데, 사용자와 운영체제의 내부(커널) 사이의 인터페이스를 감싸는 층이 쉘이기 때문에 그러한 이름이 붙게 되었다. 일반적으로 명령 줄 인터페이스(CLI) 방식과 그래픽 사용자 인터페이스(GUI) 두 가지 종류로 분류된다. 쉘은 사용자의 명령어를 읽어 해석하는 명령어 인터프리터(command interpreter)라고 할 수 있다. 터미널과 쉘의 차이 리눅스에서 터미널은 사용자로부터 명령 텍스트를 입력받고 결과를 출력하는 프로그램이다. 쉘은 터미널로부터 명령을 받아 컴퓨터에게 명령을 전달하는 프로그램이다. 터미널이 쉘을 감싸고 있는 Wrappe..