스프링부트 공부노트 (4)
[백엔드 개발자의 스프링부트 공부노트] async / await 비동기
[스터디] JS - async / await을 사용하는 이유(feat. 비동기처리) (velog.io)
[백엔드 개발자의 스프링부트 공부노트] CommonJS (CJS) - 동기 모듈 로드:
CJS - 모듈 동기 로드
CJS(CommonJS)는 Node.js에서 사용하는 모듈 시스템입니다. CJS는 파일 기반 모듈입니다. 각 파일은 이 변수들 내에서만 사용하는 고유의 점령적 유효 범위가 있습니다. 모듈을 참조하기 위해 require 함수를 사용하며, 모듈을 내보내기 위해 module.exports 객체를 사용합니다. 동기 로드를 사용하는 경우, 모듈 로딩은 동기적으로 실행됩니다. 따라서 다음 구문이 실행되기 전에 모듈의 내보낸 값을 받을 수 있습니다. 다음 예제는 동기적으로 모듈을 로드하고 사용하는 예제입니다.
// 모듈의 동작을 정의합니다.
function doSomething() {
return 'Hello, CJS!';
}
// 내보낼 객체를 정의합니다.
module.exports = {
doSomething,
};
main.js 파일:
// `require` 함수로 moduleA를 로드합니다.
const moduleA = require('./moduleA');
// moduleA의 동작을 실행하고 결과를 출력합니다.
console.log(moduleA.doSomething()); // 'Hello, CJS!'가 출력됩니다.
이 예제에서는 moduleA.js 를 관리하고 있는 모듈을 main.js에서 require 함수로 불러와 사용하였습니다. moduleA.js에서는 doSomething 함수를 정의했고, module.exports 객체를 사용하여 함수를 내보냈습니다. 이후 main.js에서 모듈을 로드하여 사용할 수 있습니다. 여기서 주의할 점은 동기적으로 모듈을 로드할 경우, 코드 실행은 로드가 완료될 때까지 기다리게 됩니다. 이는 성능 저하의 원인이 될 수 있으므로, 가능한 경우 비동기적 모듈 로드를 사용하는 것이 좋습니다. 그러나 동기 로드가 필요한 경우도 있습니다. 예를 들어 초기 설정 정보를 로드하는 경우 때때로 동기 로드를 사용해야 합니다.
ESM - 모듈 비동기 로드
CJS는 동기적인 모듈 로드 방식으로 require를 사용하고,
ESM은 비동기적인 모듈 로드 방식으로 import를 사용합니다. ESM은 브라우저 및 최신 버전의 Node.js에서 사용 가능하며, 비동기적으로 모듈을 로드하는 장점이 있습니다.
[백엔드 개발자의 스프링부트 공부노트]
function go() {
return ":P";
}
// 함수 정의가 간단해짐
function withDefaults(
a,
b = 5,
c = b,
d = go(),
e = this,
f = arguments,
g = this.value,
) {
return [a, b, c, d, e, f, g];
}
// 함수 정의가 길고 장황함
function withoutDefaults(a, b, c, d, e, f, g) {
switch (arguments.length) {
case 0:
a;
case 1:
b = 5;
case 2:
c = b;
case 3:
d = go();
case 4:
e = this;
case 5:
f = arguments;
case 6:
g = this.value;
default:
}
return [a, b, c, d, e, f, g];
}
// 아래와 같이 함수 호출하면 동일한 결과를 보임
withDefaults.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
withoutDefaults.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="],
이 코드 실행순서로대로 시간순으로 에 대한 상세한 설명과 이해하기 쉬운 코드로 코드 작성과 코드주석, 출력값을 작성해줘
[백엔드 개발자의 스프링부트 공부노트]
than, catch
[백엔드 개발자의 스프링부트 공부노트] @ResponseBody 애너테이션
@ResponseBody 애너테이션은 Spring MVC 프레임워크를 사용하는 웹 애플리케이션에서 HTTP 응답을 JSON 또는 XML 형식으로 변환할 때 사용되는 애너테이션입니다. @ResponseBody 애너테이션을 컨트롤러 메소드에 적용하면, 메소드 리턴 값이 HTTP 응답 본문 (body)으로 직접 작성됩니다. 이 작업은 메시지 변환기(message converter) 덕분에 가능한데, Spring은 기본적으로 여러 메시지 변환기를 제공합니다. 아래 예시는 JSON 형식으로 응답하는 간한 Spring MVC 애플리케이션입니다. 먼저 의존성 추가가 필요한데, Maven 기준으로 pom.xml에 다음과 같이 추가해주세요:
XML
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
다음으로, Person 클래스를 정의해보겠습니다.
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getter, setter 생략
}
이제 컨트롤러를 작성합니다.
@RestController
public class MyController {
@GetMapping("/person")
public @ResponseBody Person getPerson() {
return new Person("홍길동", 30);
}
}
위의 예제에서는 @RestController 애너테이션을 사용했습니다. 이 애너테이션은 Spring 4에서 도입되었으며, @Controller와 함께 @ResponseBody 애너테이션을 추가한 것입니다. 따라서 모든 메소드에 자동으로 @ResponseBody 애너테이션이 적용됩니다. 이제 어플리케이션 실행 후 /person 주소로 접속하면 아래와 같은 출력 결과를 확인할 수 있습니다.
json
{
"name": "홍길동",
"age": 30
}
[백엔드 개발자의 스프링부트 공부노트] git 저장소 초기화
IntelliJ에서 이와 같은 메시지가 나타나면 해당 디렉터리에 Git 저장소가 설정되지 않은 것 입니다. 디렉터리를 Git 저장소로 적절하게 설정하려면 다음의 과정을 따라주세요.
- 디렉터리로 이동: 터미널을 열어 작업하려는 디렉터리(C:\asac_code)로 이동하려면 다음 명령어를 입력하세요.
cd C:\asac_code
- Git 저장소 초기화: 터미널에서 아래 명령어를 실행하여 해당 디렉터리에 새 Git 저장소를 초기화하세요.
git init
이 명령어를 실행하면 .git이라는 하위 폴더가 생성되며, 해당 디렉터리를 Git 저장소로 관리할 수 있게 됩니다.
이제 IntelliJ에서 C:\asac_code 디렉터리를 Git 저장소로 인식할 수 있어야 합니다. 만약 여전히 같은 오류가 발생한다면, IntelliJ를 재시작하고 다시 시도해 보세요. 이 과정을 완료한 후에는 평소처럼 Git과 관련된 작업을 계속하실 수 있습니다.
'컴퓨터공부 > Springboot' 카테고리의 다른 글
스프링부트 공부노트 (6) 포스트맨 (0) | 2023.08.18 |
---|---|
스프링부트 공부노트 (5) (0) | 2023.08.15 |
스프링부트 공부노트 (3) (0) | 2023.08.14 |
스프링부트 공부노트 (2) (0) | 2023.08.14 |
댓글