본문 바로가기
728x90
반응형

전체 글182

[Spring] AOP와 @EnableAspectJAutoProxy Spring AOP (Aspect Oriented Programming) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불립니다. 쉽게 말해 관점에 따라 각각 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶음)하겠다는 것입니다. 소스 코드에서 여러 코드에서 반복해서 사용하는 코드를 발견할 수 있는데 이것을 흩어진 관심사(Crosscutting Concerns)라고 합니다. 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비지니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지입니다. AOP 주요 개념 Aspect : 흩어진 관심사를 모듈화 한 것 Target : Aspect를 적용하는 곳 (ElementType 등) Advice : 실질적인 부가.. 2022. 4. 27.
[JAVA8] null 대신 Optional 그동안 NullPointerException을 피하기 위해 어떻게 해결해 왔을까?다음은 null 확인 코드를 추가해서 NullPointerException을 줄이려는 코드입니다.// null 안전시도 1: 깊은 의심public String getCarInsuranceName(Person person) { if (person != null) { // null 확인 Car car = person.getCar(); if (car != null) { // null 확인 Insurance insurance = car.getInsurance(); if (insurance != null) { // null 확인 .. 2022. 4. 24.
[Spring] hCaptcha 적용 hCaptcha에 대한 설명은 다른 페이지에서 자세히 설명하고 있기 때문에 생략하고 적용하는 방법에 대해 설명하겠습니다. 우선 https://dashboard.hcaptcha.com/ 에 회원가입을 하여 Site key와 Secret key를 확인합니다. html에 스크립트와 hCaptcha가 노출될 부분에 코드를 삽입합니다. (옵션 값 확인 : https://docs.hcaptcha.com/configuration#hcaptcha-container-configuration ) 그럼 아래와 같이 hCaptcha가 노출이 됩니다. 사용자가 캡챠를 성공적으로 통과를 하면 숨겨져 있는 "h-captcha-response"에 값이 추가됩니다. 만약 아래와 같이 Warning: localhost detected... 2022. 3. 21.
[Spring Security] DelegatingPasswordEncoder와 BCryptPasswordEncoder strength에 따른 수행시간 DelegatingPasswordEncoder에 대해 정리하기 전에, 스프링 시큐리티 래퍼런스 내용을 살펴보겠습니다. Srping Password Storage Spring Security’s PasswordEncoder interface is used to perform a one way transformation of a password to allow the password to be stored securely. Given PasswordEncoder is a one way transformation, it is not intended when the password transformation needs to be two way (i.e. storing credentials used to auth.. 2022. 3. 20.
[Spring Batch] batch step에서 processor chaining하는 방법 다음과 같은 batch step이 존재할 때, processor를 추가하기 위해선 어떻게 해야 할까요? @Bean public Job ioSampleJob() { return this.jobBuilderFactory.get("ioSampleJob") .start(step1()) .build(); } @Bean public Step step1() { return this.stepBuilderFactory.get("step1") .chunk(2) .reader(fooReader()) .processor(fooProcessor()) .writer(barWriter()) .build(); } public class Foo {} public class Bar { public Bar(Foo foo) {} } pub.. 2022. 2. 4.
[Flutter] AppLifeCycle event (onResume 등) Flutter에서 앱 상태를 확인할 수 있는 이벤트를 출력하는 방법에 대해 알아보겠습니다. https://docs.flutter.dev/get-started/flutter-for/android-devs#how-do-i-listen-to-android-activity-lifecycle-events https://docs.flutter.dev/get-started/flutter-for/ios-devs#how-do-i-listen-to-ios-lifecycle-events import 'package:flutter/widgets.dart'; class LifecycleWatcher extends StatefulWidget { @override _LifecycleWatcherState createState() .. 2022. 1. 20.
[Android] 버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요. 배경 안드로이드 Google Play스토어에 앱 업로드 시 "버전 코드는 이미 사용되었습니다. 다른 버전 코드를 사용해 보세요."라는 오류가 발생했습니다. 버전 코드 변경 코드 상에서 따로 버전 설정을 한 기억이 없어서 초기 세팅을 확인해보았습니다. build.gradle 파일에 보면 버전을 다음과 같이 사용 중이었는데, def flutterVersionCode = localProperties.getProperty('flutter.versionCode') def flutterVersionName = localProperties.getProperty('flutter.versionName') android { ... defaultConfig { versionCode flutterVersionCode.toIn.. 2022. 1. 12.
[MySQL] int(n)와 zerofill, varchar(n)와 sql_mode MySQL에서 VARCHAR는 문자열 타입 중 하나로 가변 길이의 문자열을 저장합니다. 필요한 만큼만 공간을 사용하기에 고정 길이 타입보다 저장 공간을 적게 사용하기도 합니다. VARCHAR의 default 크기는 255입니다. VARCHAR(255) 예를 들어 데이터 타입이 VARCHAR(4)인 컬럼에는 4byte까지만 데이터를 저장할 수 있습니다. 정수 타입 중 INT의 범위는 ~2147483648 ~ 2147483647 (signed), 0 ~ 4294967295 (unsigned) 인데, 처음에는 INT(N)에서 N에 들어가는 값이 VARCHAR처럼 길이인 줄 알았습니다. 그래서 두 자리 숫자를 저장하기 위해 INT(2)로 타입을 지정했는데, INT 범위의 숫자는 다 저장이 되었습니다. mysql.. 2022. 1. 10.
[Linux] Pinpoint-Docker 설치 Pinpoint Docker 설치 시 Docker가 설치 되어있어야 하며, docker 실행 명령어 docker-compose 패키지가 설치되어 있어야합니다. 1. 기본 디렉터리 생성 $mkdir -p ~/apps/pinpoint 2. Git 설치 #yum install git 3. Docker 다운로드 docker를 다운받기 위해 linux 최신 버전 패키지 업데이트 #yum -y upgrade Docker 다운로드 및 설치 #yum -y install docker Docker 설치 확인 #docker -v Docker 실행 전에 Volume 경로 수정 필요(파일 시스템 용량이 큰곳으로 변경) #vi /etc/docker/daemon.json { "graph":"/data/docker"# default.. 2021. 12. 30.
[Linux] PermissionError: [Errno 13] Permission denied 서버에서 유저 권한으로 docker-compose pull와 docker-compose up -d 명령문 실행 시 PermissionError: [Errno 13] Permission denied 오류가 발생했습니다. /var/run/ 경로에 있는 docker.sock의 권한을 확인해보겠습니다. 유저 권한이 존재하지 않으므로 권한을 추가하겠습니다 $sudo chmod 666 /var/run/docker.sock 그리고서 docker.sock의 권한을 확인해보면 유저에 읽기 쓰기 권한이 부여됐습니다. 다시 docker-compose pull 와 docker-compose up -d 명령문을 실행해보면 정상 실행되는 것을 확인할 수 있습니다. 2021. 12. 30.
728x90
반응형