Node.js 에서도 Spring 과 달리 그리고 Django 와 같이 url 매핑을 하는 Router 와 서비스 로직을
수행 혹은 호출하는 Controller 2개로 나누어서 구현한다!
그렇기 때문에 우선 Controller 를 만들고 Service 로 만들고 Router 순으로 만들어보자!
@RestController
@RequestMapping("/api/fix-extension")
@RequiredArgsConstructor
public class FixExtensionController {
private final ExtensionService fixExtensionService;
// 메서드에 따른 Controller 구분
@PostMapping("/{extension}")
public ResponseEntity<ExtensionResponse>enableFixExtension(@PathVariable String extension) {
ExtensionRequest extensionRequest = ExtensionRequest.builder()
.extension(extension)
.build();
ExtensionResponse response = fixExtensionService.addExtension(extensionRequest);
return ResponseEntity.ok(response);
}
@DeleteMapping ("/{extension}")
public ResponseEntity<ExtensionResponse> disableFixExtension(@PathVariable String extension) {
ExtensionRequest extensionRequest = ExtensionRequest.builder()
.extension(extension)
.build();
ExtensionResponse response = fixExtensionService.deleteExtension(extensionRequest);
return ResponseEntity.ok(response);
}
@GetMapping
public ResponseEntity<List<ExtensionResponse>> findAllFixExtension() {
List<ExtensionResponse> responses = fixExtensionService.findAllEnabledExtensions();
return ResponseEntity.ok(responses);
}
}
export class fixExtensionController {
// 서비스 인스턴스 생성
getAllFixExtension = async (req, res, next) => {
// 모든 고정 확장자 조회
}
enableFixExtension = async (req, res, next) => {
// 고정 확장자 활성화
}
disableFixExtension = async (req, res, next) => {
// 고정 확장자 비활성화
}
}
URI 를 매핑 해줄 router 파일을 따로 구성하기 때문에 어노테이션으로 주소 매핑을 명시하는
Spring 의 Controller 와는 차이가 있다!
그리고 오랜만에 본 async 키워드를 보자 궁금한게 많이 떠올라서 (그냥 까먹은..)
관련 내용을 좀 조사했다..ㅎ
Spring Boot 는 멀티 쓰레드 방식으로 내장 Tomcat 을 이용해 다중 요청을 처리한다.
그러나 Node.js 는 싱글 쓰레드이기 때문에 다중 요청 처리를 위해서는 비동기 함수의 사용이
필수적이다. 이러한 특성 때문에 async, await, Promise 등의 특성이 생긴 것이다!
(이렇게 Spring Boot 와 Node.js 그리고 Django 까지 각각의 다중 요청 방식과 특징은 이후
따로 공부해보자!)
gpt 에게 물어본 async
ChatGPT
Node.js 와 Spring 차이 참고 자료
‘Node.js’ VS ‘Java Spring’
[Node.js vs Spring] Node.js vs Spring의 차이
그러면 이제 실제 비즈니스 로직을 수행할 서비스를 만들어보자!