분류 전체보기
[HTTP] HTTP 쿠키와 세션
[HTTP] HTTP 쿠키와 세션
2023.06.12서로 간의 통신을 위한 약속을 프로토콜이라고 한다. 웹에서 프로토콜은 주고 받을 데이터에 대한 형식을 정의한 것으로 생각하면 된다. 데이터를 주고받을 때, 어떤 형식으로 주고받을지 미리 협의 해 놔야 통신이 가능하다. HTTP (Hyper Text Transfer Protocol) 도 프로토콜의 종류 중 하나다. 1. Stateless HTTP는 상태를 유지하지 않는다. 따라서 같은 클라이언트가 같은 요청을 서버에게 2번 보내도 서버는 같은 클라이언트로부터 도착한 요청임을 알 수 없다. 따라서 쿠키와 세션을 사용해 사용자를 구분한다. 쿠키는 클라이언트의 브라우저에서 관리되는 작은 데이터 파일이다. 서버는 HTTP 응답 메세지를 보낼 때 헤더에 Set-Cookie 필드를 생성해 쿠키를 설정한다. 클라이언트..
[Flutter] 프로젝트 구조와 Widget
[Flutter] 프로젝트 구조와 Widget
2023.06.11플러터는 다트 언어의 프레임워크로 다트 언어로 작성한 코드를 컴파일을 통해 각 플랫폼이 인식할 수 있는 네이티브 코드로 변환하고, (Android -> Dart VM IOS -> LLVM) 각 운영체제는 컴파일 된 네이티브 코드를 실행하게 된다. 안드로이드, iOS 같은 모바일 애플리케이션 뿐만 아니라 데스크탑 애플리케이션과 웹 애플리케이션도 플러터로 제작할 수 있지만, 모바일 애플리케이션 부분을 플러터가 가장 원활하게 지원하고 있다. 개발할 때 사용하는 IDE로는 vscode, Android Studio, IntelliJ 등 여러가지가 있다. .dart_tool : 다트와 플러터가 생성한 파일이 포함된다. 스프링의 .gradle 디렉토리와 비슷한 역할을 한다. .idea : 인텔리제이로 프로젝트 생성할..
[Java] 람다 표현식
[Java] 람다 표현식
2023.06.09코드를 간결하게 작성하고 중복을 최대한 피하기 위해 사용한다. 어떤 메서드를 구현한다고 해 보자. 확장성을 열어놓기 위해 특정 비즈니스 요구사항이 추가됐을 때 쉽게 수정하고 추가할 수 있어야 한다. 이를 위해 값을 메서드의 파라미터로 넘기는 것 보다 동작을 메서드의 파라미터로 넘기는 편이 합리적이다. package Parameter; public class Apple { private String color; priavet String weight; public Apple(String color, String weight) { this.color = color; this.weight = weight; } public String getColor() { return color; } public String..
[Spring 3.1] 스프링 MVC 애너테이션
[Spring 3.1] 스프링 MVC 애너테이션
2023.06.02@RequestMapping 스프링 MVC는 핸들러 매핑으로 메서드를 연결해준다. // 슬래시로 끝나지 않으면 hello.* hello/ 도 함께 매핑됨 @RequestMapping("/hello") public String hello() { ... } // @GetMapping을 이런식으로 구현 @RequestMapping(value = "/hello" method = RequestMethod.GET) public String hello() { ... } // 매핑에 요청 파라미터 지정 가능 @RequestMapping(value = "/hello" params="type=admin") public String hello() { ... } @RequestMapping(value = "/hello" pa..
[Spring Boot] 외부 설정
[Spring Boot] 외부 설정
2023.05.28개발한 애플리케이션을 실행할 때는 개발 / 로컬 / 운영 환경으로 나눠서 실행하고, 환경마다 사용하는 데이터베이스나 기타 설정을 다르게 설정한다. 변하는 환경 값들을 실행하는 시점에서 외부에서 넣어 주는 방식을 사용하는 편이 합리적이다. 대부분 애플리케이션 빌드는 한 번만 하고, 애플리케이션을 실행할 때 설정 정보를 외부에서 넣어 주는 방식을 사용한다. 외부 설정으로는 크게 4가지 방법이 있다. 1. OS 환경 변수 : 운영체제에서 제공하고, 해당 운영체제를 쓰는 모든 프로세스에서 사용된다. System.getenv() 메서드로 Map을 반환받고 OS가 제공하는 환경 변수를 출력할 수 있다. 데이터베이스 접근 URL을 OS의 환경 변수에 설정해두고 애플리케이션 실행 시 읽어들이는 방식을 사용할 수 있다...
[Spring Boot] 자동 구성
[Spring Boot] 자동 구성
2023.05.26DB에 회원을 저장하고 관리하려면 JdbcTemplate, DataSource, TransactionManager 등 데이터베이스 관련 여러 빈들이 사용된다. 스프링 부트는 자동 구성 기능을 사용해 자주 사용하는 빈들을 자동으로 등록해준다. spring-boot-autoconfigure 프로젝트 내부에서 자동 구성 관련 정보를 확인할 수 있다. (spring-boot-starter 라이브러리를 추가할 때 등록된다) @AutoConfiguration(after = DataSourceAutoConfiguration.class) @ConditionalOnClass({ DataSource.class, JdbcTemplate.class }) @ConditionalOnSingleCandidate(DataSource..
[Spring Boot] 라이브러리의 선택과 버전 관리
[Spring Boot] 라이브러리의 선택과 버전 관리
2023.05.23스프링으로 애플리케이션을 만들 때 아무것도 없는 처음부터 시작하지는 않는다. 미리 작성된 라이브러리들을 불러와서 적절하게 사용하는 방식으로 애플리케이션을 작성하는데... 적절한 라이브러리를 찾았다고 해서 무조건 정상적으로 작동한다는 보장은 없다. 라이브러리를 구축할 때 서로 충돌이 발생하지 않도록 버전 관리도 해 줘야 하고, 새로운 버전이 나오면 라이브러리를 따로 업데이트 해 줘야 한다. 스프링 부트는 라이브러리의 버전을 관리해준다. 개발자는 필요한 라이브러리를 고르기만 하면 되고, 스프링 부트가 사용하는 라이브러리들의 버전을 알아서 관리한다. (최적화 된 버전을 사용한다) dependency-management 플러그인을 사용하면 spring-boot-dependencies 의 bom (bill of ..
[Spring Boot] 부트와 내장 WAS
[Spring Boot] 부트와 내장 WAS
2023.05.22웹 서버와 웹 애플리케이션 서버에 대해 제대로 알고 넘어가자. 웹 서버는 HTTP 프로토콜로 들어오는 클라이언트의 요청을 받아 처리하는 역할을 수행한다. (Apache, Nginx) 웹 애플리케이션 서버 (WAS) 도 클라이언트의 요청을 받아 동적인 컨텐츠를 제공한다. (Tomcat, Express, Django..) 웹 서버는 페이지를 렌더링 할 때 필요한 정적인 컨텐츠와 로드밸런싱, SSL 암호화 등을 빠르게 제공하고 웹 애플리케이션 서버는 동적인 컨텐츠를 제공한다. 스프링 애플리케이션은 WAS 위에서 실행되고, 웹 서버를 앞에 두고 웹 서버를 통해 클라이언트의 요청을 전달받고 요청을 처리하는 방식을 자주 사용한다. 클라이언트가 웹 서버에 HTTP 요청을 보내면 웹 서버가 정적 컨텐츠 요청인지 동적 ..
[Spring Boot] 스프링과 웹 서버
[Spring Boot] 스프링과 웹 서버
2023.05.21부트를 사용하기 전 웹 애플리케이션을 배포하려면 WAS를 따로 설치해 주고 해당 WAS에서 잘 동작하도록 서블릿 스펙에 맞춰 코드를 작성한 후 WAR로 패키징해서 WAS의 배포 디렉토리에 WAR파일을 전달해 줘야 했다. 부트는 이런 작업을 자동화한다. Tomcat (WAS) 을 기본적으로 포함하고 있어 작성한 자바 코드를 빌드한 jar파일을 실행해주기만 하면 애플리케이션이 실행된다. (jar는 메인 메서드가 있다) 자바는 여러 클래스와 리소스들을 묶어서 JAR (Java Archieve) 압축 파일을 만들 수 있다. JAR 로 패키징 된 파일은 JVM에서 직접 실행되거나 다른 애플리케이션의 라이브러리로 사용될 수 있다. (직접 실행되는 경우 메인 메서드가 있어야 하고, MANIFEST 파일에 실행할 메인..
[eGovFramework] 표준프레임워크 개요
[eGovFramework] 표준프레임워크 개요
2023.05.15지금이야 애플리케이션 개발할 때 웹 개발 방식을 많이 사용하지만, 이전에는 exe파일을 배포하는 C/S 방식과 단말기를 통해서 서비스를 제공받는 메인프레임 방식으로 개발을 진행했었고, 그보다 더 이전에는 어셈블리언어를 통해 하드웨어를 개발했었다. 어셈블리 -> 절차지향 -> 객체지향 -> 프레임워크 사용하는 개발 도구의 흐름은 위와 같다. 공통되는 부분을 따로 빼고, 중복되는 부분을 쉽게 재사용 하기 위해 위와 같이 변화해왔고 그 결과 프레임워크가 도입됐다. 프레임워크는 애플리케이션 개발의 구조와 틀을 제공한다는 점에서 라이브러리와 다르다. 자동차에 비유하자면 라이브러리는 핸들, 엔진 등 특정 기능을 제공한다. 프레임워크는 자동차의 큰 틀을 제공한다. 컴포넌트는 자동차의 표준화 된 기능을 제공해 프레임워..
[Spring Boot] 스프링 부트의 도입
[Spring Boot] 스프링 부트의 도입
2023.05.14스프링 부트는 스프링을 편하게 사용할 수 있도록 지원한다. 자바로 애플리케이션을 편하게 만들기 위해 스프링이 도입됐고, 스프링을 편하게 사용하기 위해 스프링 부트가 도입됐다. 스프링 부트는 스프링에서 설정해야 되는 여러 요소들을 자동화하고 Best Practice를 사용할 수 있도록 설계되어있다. 아래는 부트가 자동화하는 주요 기능이다. (많은 기능 중 주요 기능이다) 스프링 부트는 스프링 부트로, 부트가 아닌 스프링은 스프링으로 서술한다. 1. WAS 내장 스프링 부트는 Tomcat을 내장하고 있어 스프링 프로젝트를 다룰 때 처럼 Tomcat을 따로 설치할 필요가 없다. 스프링과는 다르게 메인 메서드가 있어 메인 메서드를 실행하면 내장된 WAS를 실행하게 된다. 2. 라이브러리 관리 애플리케이션 개발에..
[Spring 3.1] 스프링 MVC와 웹 기술 - 핸들러
[Spring 3.1] 스프링 MVC와 웹 기술 - 핸들러
2023.05.13스프링은 웹 기술에서 독립적인 루트 애플리케이션 컨텍스트와 웹 기술 기반으로 동작하는 서블릿 애플리케이션 컨텍스트 두 가지로 애플리케이션 컨텍스트를 분리해서 구성한다. (계층 구조로 구성돼 서블릿 애플리케이션 컨텍스트는 루트 애플리케이션 컨텍스트에 접근할 수 있다) 루트 애플리케이션 컨텍스트에서는 서비스, 리포지토리 등 웹과 관련된 기능을 제외한 모든 빈을 관리하고, 서블릿 애플리케이션 컨텍스트에서는 핸들러 매핑, 뷰 리졸버 등 웹과 관련된 빈들을 관리한다. 배치 작업 등 웹과 관련되지 않은 애플리케이션은 웹 관련 빈들을 관리하는 서블릿 애플리케이션 컨텍스트가 필요하지 않다. 이렇게 애플리케이션을 두 개로 분리하면 서블릿 애플리케이션 컨텍스트를 다른 기술로 교체하거나 제거할 수 있어 애플리케이션을 효과적..