본문 바로가기

전체 글311

Spring IoC - @Autowired @Autowired 의존성을 주입할 때 사용한다. 필드, 세터, 생성자 위에 붙여 의존성을 주입할 수 있다. A클래스에 B클래스를 연결지어 보자(의존성을 주입해보자) 이 때, A는 빈에 등록되었고, B는 빈에 등록되어있지 않다. A클래스의 생성자에 @Autowired를 붙일 경우, 주입하려는 B클래스가 빈에 등록되어 있지않으므로 바로 에러가 난다. 파라미터로 받는 B클래스가 빈 공장에서 찾을 수 없으므로 생성자가 생성되지 않아 A클래스가 만들어지지 않기 때문이다. A의 필드나 세터 위에 붙일 경우도 에러가 난다. 하지만 이 때는 required 옵션으로 에러발생은 방지할 수 있다. @Autowired(required = false) required 기본값은 true 이다. 생성자에는 이 옵션을 넣어봐도 .. 2021. 1. 10.
Spring IoC - 빈 등록 방법 5가지 스프링 2003년 등장해서, java EE 와 호환관계이다. 서블릿 기반 애플리케이션을 만들 때 사용한다. 스프링 5부터는 WebFlux 지원으로 서블릿 기반 아닌 애플리케이션도 만들 수 있게 되었다. 디자인 철학 모든 선택은 개발자의 몫이다. 다양한 관점을 지향한다. 하위 호환성을 지킨다. API를 신중히 설계한다. 높은 수준의 코드를 지향한다. 컨테이너와 빈 IoC(Inversion of Control, 제어의 역전)은 의존성주입 (Dependency Injection)이라고도 하며 의존성있는 객체를 직접 만드는 것이 아닌, 주입 받아 사용하는 방법이다. BeanFactory 는 스프링 IoC 컨테이너의 가장 최상위 인터페이스이다. 빈이란? 빈(bean)은 스프링 IoC 컨테이너가 관리하는 객체이다... 2021. 1. 10.
Spring PSA 예시 Spring PSA Portable Service Abstraction PSA는 잘 만들어진 인터페이스라고 할 수 있다. 각각의 개발자들이 만든 코드는 확정성이 좋지 못하거나 특정 기술에 특화되어 있을 수 있다. 개발자들이 공동으로 쓰는 모듈은 그 서비스가 추상화되어 각 개발자들이 통일적, 효율적, 그리고 보다 쉬운 코드 개발이 가능하다. 스프링 웹 MVC를 예를 들어보자. (Model View Controller) @Controller 애노테이션이 붙은 클래스에서 @GetMapping, @PostMapping 등을 이용해서 원하는 url을 매핑시킬 수 있다. 한편 @RequestMapping 어노테이션을 붙인 클래스에서 @RequestMapping(method=RequestMethod.GET), @Re.. 2021. 1. 9.
Spring AOP 예제 Spring AOP 스프링의 트라이앵글로 IoC, AOP, PSA 가 있다. 그 중 AOP를 공부해보자. AOP Aspect Oriented Programming, 관점지향 프로그래밍 OOP 는 같은 종류의 대상을 최상위 클래스로 부터 아래 클래스를 긴밀한 관계(추상화, 캡슐화, 상속, 다형성)로 설계를 지향하는 프로그래밍이라면, AOP는 종류가 다른 클래스 사이에서 효율적인 코드 설계(중복 제거 등)를 지향하는 프로그래밍이다. AOP를 구현하는 방법은 아래와 같다. sample.java 를 컴파일하여 sample.class 가 되는 사이에 AOP를 구현한다. (AspectJ) 바이트코드를 조작하여 sample.java ➞ sample.class 로 컴파일 후 실행시키는 과정에서 메모리에서 AOP를 구현.. 2021. 1. 8.
Spring IoC란 스프링 IoC IoC Inversion of Control, 제어의 역전 일반적인 의존성 제어권은 내가 사용할 의존성은 내가 만드는 것이다. 제어의 역전 (IoC)은 내가 사용할 의존성은 이미 만들어져 있는 것에 연결한다는 의미이다. 의존성 주입(DI, Dependency Injection)은 일종의 IoC 이다. IoC 컨테이너 BeanFactory 는 IoC 컨테이너다. ApplicationContext 는 BeanFactory 를 상속받는다. ApplicationContext 빈을 만들고, 의존성을 엮어주고 제공한다. Bean 인텔리제이에서 Bean은 '녹색 콩'으로 표시해준다. 애노테이션이 붙어있거나 특정 인터페이스를 상속한다. Bean 애노테이션으로 직접 빈으로 등록할수도 있다. Applicat.. 2021. 1. 8.
[Java] 패키지, import, 접근제어자 Java - Package 1 패키지 (Package) 자바에서 패키지는 관련된 클래스를 그룹화할 때 사용한다. 파일을 담는 폴더라고 생각하면 된다. 클래스 간 이름이 겹치는 것을 막고 유지하기 좋은 코드를 만들기 위해 패키지를 사용한다. 두 가지 패키지가 있다. 내장된 패키지 (Built-in packages) : Java API 로부터의 패키지 이다. Java API는 이미 쓰여진 클래스의 라이브러리이다. 자유롭게 사용가능하다. 사용자 정의 패키지 (User-defined package) 2 Import 임포트 키워드 자바 라이브러리는 패키지와 클래스로 나뉜다. import 키워드는 클래스나 패키지를 가져온다. import package.name.Class; // 하나의 클래스를 가져온다. impor.. 2021. 1. 6.
expo, expo(bare), react-native CLI 차이 React Native - Reat Native CLI(Expo 없이 배포) Expo (Managed Workflow) 설정할게 없어서 사용하기 쉽다. 내장된 많은 네이티브 모듈이 있다. Expo CLI를 통해 제어한다. Expo Wrapper를 포함한 Standalone 앱 배포가 가능하다. Android Studio, Xcode 필요없다. Expo (Bare Workflow) Non-Expo 앱 임포트된 Expo 패키지를 사용한다. 상대적으로 설정, 관리가 쉽다. 네이티브 모듈도 사용가능하다. Android Studio와 XCode에서도 빌드, 배포가 가능하다. React Native CLI Non-Expo 앱 Expo 패키지를 이용할 수 있다. 사용자 설정이 필요하다. 자신의 것을 만들기 좋다. 자.. 2020. 12. 28.
[React Native] 배포(expo, react-native cli) React Native - 배포 코드를 테스트하고, 정리한다. 앱 환경 / 개발 환경을 설정한다. 아이콘, 스플래시 스크린을 추가한다. 빌드 & 배포한다. Expo (Managed) app.json 설정을 통해 자동 asset 생성한다. expo publish expo build:android/ios Over the air 업데이트 Non-Expo 손수 설정 Android studio / Xcode 를 이용해서 빌드 내장된 OTA 업데이트는 없다. expo 배포 https://docs.expo.io/versions/v34.0.0/distribution/introduction/ Android $ expo build:android $ expo fetch:android:keystore $ expo upload.. 2020. 12. 28.
[React Native CLI] - Simulator 연동(android, ios) React Native CLI - Simulator 연동(android, ios) expo 를 사용하지 않고 react-native CLI로 앱을 실행하고, 빌드, 배포해보자. 일단 react native cli를 설치한다. $ yarn global add react-native-cli 또는 $ npm install -g react-native-cli 그리고 reac-native 를 초기화시킨다. 새로운 프로젝트 폴더를 만든다. $ react-native init MyReactNativeProject 1) Android 일단 안드로이드 시뮬레이터를 설치하고, react-native를 실행해보자. 참고로 mac에서 하였다. 1) 안드로이드 스튜디오를 다운받는다. 2) 우하단에 Configure 대신 SDK.. 2020. 12. 24.
[React Native] - Auth, 자동로그인, 자동로그아웃 React Native 300 - Auth, 자동로그인, 자동로그아웃 클라이언트(리액트네이티브 모바일앱)가 서버에게 인증 데이터를 보내면, 서버는 세션에서 인증 데이터를 저장하며 클라이언트에게 세션 키를 리턴한다. 무상태(stateless) 를 다루는 웹 애플리케이션은 RESTful API 또는 GraphQL API 를 이용해 세션에서 인증을 관리한다. 하지만 모바일 앱의 경우, 서버가 각 클라이언트의 인증을 관리하지 않기 대문에 다른 방법이 필요하다. 이 때 세션 대신 토큰을 이용한다. 모바일 앱이 인증 데이터를 보내면, 서버는 서버만 아는 개인키(private key)를 만들어 토큰의 형태로 모바일 앱에게 보낸다. 그러면 Redux storage 같은 곳에 이 토큰을 저장한다. 앱이 실행되는 동안 메.. 2020. 12. 23.
728x90