728x90
컴포넌트 스캔으로 스프링 빈 자동 등록- @Component 가 있으면 스프링 빈이 자동 등록된다.- @Controller, @Service, @Repository 은 @Component 를 포함하기 때문에 모두 스프링 빈으로 자동 등록된다.- 해당 패키지를 포함한 하위 패키지까지들만 스프링 빈을 자동 등록한다.(ex. hello > hellospring > Application.java 라면, hello 와 형제 패키지인 demo 패키지는 등록 X)- 일반적으로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드에 사용 > 참고 - @Autowired 로 생성자를 등록하면 스프링이 의존성 주입하여 연결해 준다.- 이때, 스프링 빈으로 등록되어 스프링이 관리하는 객체에서만 동작한다. - 스프링 빈은 싱글..
정적 콘텐츠- static/index.html 을 올리면 Welcome page 기능 제공- 정적 리소스를 제공 (HTML, CSS, JS, 이미지 등)- 브라우저가 요청하면 spring 이 그대로 반환- 파일 자체로 클라이언트로 전달 resources/static 폴더에 html 파일을 생성하고주소창에 localhost:8080/hello-static.html 을 입력하면, 소스 코드 파일 그대로 전달된다. (hello-static 은 임의의 viewName)1. resources/static/hello-static.index 파일을 생성한다.2. localhost:8080/hello-static.html 을 입력하여 서버에 접속한다.3. 파일이름과 일치하는 @GetMapping("hello-stati..
프로젝트 생성하는 법스프링부트 스타터(https://start.spring.io/)에 들어간다. (스프링부트 스타터 홈페이지) Project : Gradle - Groovy (요즘은 거의 다 Maven 보다 Gradle 사용)Language : 원하는 언어 선택SpringBoot : 정식 릴리즈 버전 선택 (SNAPSHOT(만드는 중), M1(정식 릴리즈 X))Project Metadata : Group(보통 기업 명), Artifact(프로젝트 명), 나머지 기본값Dependencies : Spring Web, Thymeleaf(아니면 FreeMarker) 이렇게 선택한 후, `Generate` 를 눌러 다운로드하고 압축을 풀어 저장한다.인텔리제이를 열어 `Open or Import` 를 눌러 파일 안..
프로그래스 바 구현하기function updateProgressBar(progress) { const barLength = 20; const filledLength = Math.round((progress / 100) * barLength); const emptyLength = barLength - filledLength; const filledBar = "\x1b[103m \x1b[0m".repeat(filledLength); const emptyBar = "\x1b[100m \x1b[0m".repeat(emptyLength); process.stdout.write("\x1b[1A\x1b[2K"); console.log(` 조금만 기다려주세요.${progress}%`);}function p..
Object / MapJavascript Type⸰ 원시 타입 : boolean,null,undifiend,number,string,symbol⸰ 객체 타입 : 함수,배열,정규표현식등 원시 타입을 제외한 나머지 Object⸰ Key :string,symbol⸰ Key 순서 보장 X⸰ Value 는 Key 를 통해서만 접근 가능 ⸰ for-in 문으로 반복문 수행 가능 (for-of 문 불가)⸰ Symbol.iterator 구현 Xconst person = { name: "yeHyun", gender: "female",};for (const prop in person) { console.log(prop + " : " + person[prop]);}/*name : yeHyungender : female..
비동기 함수의 반복문forEach( )⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음⸰ try/catch 가능⸰ 간단한 동기 반복 작업에 사용const func = async () => { await Promise.all(data.map(async (i) => { await insertDatabase(i); }));};비동기 작업의 완료를 보장하지 않으므로, Promise.all을 사용하여 병렬 처리 for ⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음⸰ 조건식, 초기화식, 후위식 설정 가능하여 유연하게 반복 제어const func = async () => { for (let i = 0; i 비동기 작업을 순차적으로 처리 for ... of⸰ 동기적으로 동작, 비동기 함수를 기다리지 않음..
PromisePromise⸰ 여러 개의 비동기 작업을 순차적으로 수행할 때 콜백 함수가 중첩되어 코드의 깊이가 깊어지는 콜백 지옥을 개선⸰ 콜백 함수를 대체하고, 비동기 작업의 흐름 쉽게 제어 3가지 상태⸰Pending(대기): 비동기 처리 로직이 아직 완료되지 않은 상태new Promise(function(resolve, reject) { // ...});위 메서드를 호출한 상태 ⸰Fulfilled(이행): 비동기 처리가 완료되어 프로미스가 결과 값 반환해준 상태new Promise(function(resolve, reject) { resolve();});resolve( )가 호출된 상태로 then( )을 이용하여 처리 결과 값을 받을 수 있음 ⸰Rejected(실패): 비동기 처리가 실패하거나 오..
EventEmitter EventEmitter⸰ event 를 발생시키는 모든 객체는 EventEmitter 클래스의 객체⸰ 하나의 EventEmitter 객체가 발생시키는 이벤트는, 해당 객체 내에서만 유효 > 하나의 EventEmitter 객체에 설정된 콜백 함수가 다른 EventEmitter 객체의 이벤트에 반응하지 않음 ⸰on( ) - 이벤트가 발생했을 때, 실행할 콜백 함수를 등록하는 함수 - 이벤트 핸들러를 설정하는 함수 - addLinster 함수의 역할과 인자가 동일const EventEmitter = require('events');const myEmitter = new EventEmitter();myEmitter.on('test', () => { console.log('Succ..