콜백 함수는 함수의 인자로 다른 함수를 받아서 실행되는 함수를 말한다. 보통 핸들러 함수를 구현할 때 많이 사용하는 개념이다. 이렇게, 함수를 다른 함수의 인자로 전달하려면 특정 조건을 만족해야 하는데, 그것은 바로 함수가 "일급 객체"이어야 한다는 점이다. # 일급 객체 변수에 할당 가능 함수 인자로 전달 가능 (콜백 함수) 리턴 값으로 지정 가능 함수가 일급 객체인 언어는 보통 동적 언어들이다. 정적 언어 = 변수 타입을 미리 선언해서 사용하는 언어들 (C++, Java) 동적 언어 = 변수 타입을 따로 선언 안 해도 실행 도중 알아서 타입이 매치되는 언어들 (Python, JavaScript) Java의 함수는 일급 객체? 우선, Java의 함수는 일급 객체가 아니다. 왜냐하면 일급 객체의 조건을 ..
AWS 람다에서는 파이썬 기본적인 모듈 외에 pip으로 설치하는 외부 모듈은 지원하지 않는다 따라서 외부 모듈을 import 하려면 람다 Layer(계층)에 따로 등록해줘야 한다 계층에 모듈을 등록하려면 모듈 파일을 따로 설치한 폴더를 압축해서 zip 파일로 만든 뒤, 얘를 업로드해야 한다 Layer에 추가할 파이썬 외부 모듈 zip 파일 만드는 법 1. cmd를 켜서 다음을 입력 만들어진 python파일은 C:\사용자\user에 가보면 있다 -t 명령어는 현재 디렉터리에 pip install 하겠다는 뜻이다 반드시 주의해야 할 것! 람다 Layer에 올릴 zip 파일 구조는 아무 이름.zip -> python -> 모듈 폴더들 이 구조를 무조건적으로 지켜야 인식한다 그리고 반드시 폴더명을 python으..
보통 개발 프로세스 요구사항 분석 및 기능 분석 디자이너 : 요구사항에 맞도록 디자인하고, 디자인 결과물을 웹 퍼블리셔에게 넘겨준다 웹 퍼블리셔 : 디자이너에게 받은 디자인을 기반으로 HTML, CSS를 만들어 개발자에게 제공한다 백엔드 개발자 : 디자이너, 웹 퍼블리셔를 통해서 HTML 화면이 나오기 전까지 시스템을 설계하고, 핵심 비즈니스 모델을 개발한다. 이후 HTML이 나오면 이 HTML을 뷰 템플릿으로 변환해서 동적으로 화면을 그리고, 또 웹 화면의 흐름을 제어한다 만약, React를 사용하는 프론트 개발자가 있으면 퍼블리셔 역할도 겸임하면서 화면을 그리는 파트를 전담하게 된다 이럴 경우 백엔드는 뷰 템플릿을 만질 필요 없이 HTTP API 기능만 제공하면 된다 스프링 백엔드 개발 순서 DB 설..
# 모델, 뷰, 컨트롤러의 역할 모델 데이터를 담는 일종의 박스 뷰 사용자에게 보여질 페이지를 렌더링 컨트롤러 사용자의 요청(URL)을 받아서 처리할 로직을 확인한 뒤, View를 반환(or HTTP 응답)하는 역할 (실질적인 비즈니스 로직은 서비스에서 처리) # 웹 요청 처리의 전반적인 흐름도 클라이언트가 요청 DispatcherServlet이 해당 URL요청을 제일 먼저 받음 (문지기 역할) HandlerMapping : 해당 URL를 처리할 수 있는 컨트롤러를 탐색 컨트롤러 호출 : URL 처리 및 ModelAndView를 받아옴 컨트롤러 실행 결과를 뷰 리졸버에게 전달 뷰 렌더링 (응답 출력) 컨트롤러 내부에서 모델에 데이터를 설정하고 뷰로 보내면, 뷰에서 해당 데이터를 사용할 수 있다 @GetM..
서블릿과 톰캣 우선 서블릿을 이해하기 위해 클라이언트가 서버로 HTTP 요청을 보내서 서버가 처리하는 기본적인 프로세스를 상상해보자 (클라이언트에서 Form으로 서버에게 "회원가입" HTTP 요청을 보냈다고 가정한다) 그러면 서버 측에서는 다음과 같은 일련의 과정을 실행한다 0. TCP/IP 대기, 소켓 연결 1. HTTP 요청 메시지 헤더 부분 파싱 2. 어떤 방식인지 파악 (POST, GET 등등) 3. Content-type 파악 4. HTTP 바디 부분 파싱 5. 비즈니스 로직(회원가입) 실행 (이름, 나이를 받아와서 DB에 저장) 6. HTTP 응답 메시지 작성 시작 (라인 생성, 헤더 작성, 바디에 HTML 생성) 7. TCP/IP 응답 전달, 소켓 종료 이렇게 클라이언트의 요청을 수행하고 응..
Do it! 자바 프로그래밍 입문을 보면서 익힌 객체 지향 기본 개념들을 보기 쉽게 정리 생성자 인스턴스를 생성할 때 초기화시키는 함수 (생성자를 메서드라고 부르진 않음) 생성자의 이름은 해당 클래스와 동일하게 파라메터만 다르게 해서 여러 개의 생성자를 만들 수 있음(오버로딩) 클래스 내에 생성자가 하나라도 없으면 JVM이 프리 컴파일 단계에서 알아서 만들어서 넣어줌 public class Student { String name; int grade; public Student() {} //default 생성자 //오버라이딩해서 새로만든 생성자 public Student(String name,int grade) { this.name = name; this.grade = grade; } } *this는 해..