전체 글

전체 글

    헤드퍼스트 디자인 패턴 1장. 전략(Strategy)패턴

    헤드퍼스트 디자인 패턴 1장. 전략(Strategy)패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 1장 : 디자인 패턴의 세계로 떠나기 디자인 패턴 소개와 전략 패턴 디자인 패턴소개에 앞서, 객체지향에 대한 기본적인 이해가 필요합니다. 필요한 객체지향 기초 개념 추상화 : 공통 속성 및 기능을 묶어 이름을 붙임 캡슐화 : 데이터 구조 및 다루는 방법들을 결합시켜 묶는 것 상속 : 상위 개념의 특징을 하위 개념이 물려받는 것 다형성 : 물려받은 상위 개념의 특징을 재정하는 것 디자인 패턴의 의의 디자인패턴은 코드가 아닌 경험을 재사용하는 것이다. 다른 개발자가 우리와 똑같은 문제를 경험하고 해결하면..

    Spring boot 서버를 Gradle로 build해 jar로 직접 배포하기

    Spring boot 서버를 Gradle로 build해 jar로 직접 배포하기

    개요 spring boot 프로젝트는 jar 또는 war 파일로 배포할 수 있습니다. jar 파일로 배포하는 경우 : 내장된 톰캣서버 쨰로 배포할것이면 jar로 배포합니다. war 파일로 배포하는 경우 : 이미 WAS환경이 존재해 내장 톰켓서버를 빼고 배포하려면 war파일로 배포하면 됩니다. 그리고 빌드 관리도구(Maven, Gradle)에 따라 배포하는 방법이 다릅니다. 저는 Gradle을 사용하므로 Gradle 방식으로 배포하는 방법에 대해서 기술하겠습니다. 1. JAR 파일 빌드 릴리즈 전 jar파일을 만들어야 합니다. jar 파일을 만드는방법은 IDE를 사용하는 방법과 CLI로 terminal에서 진행하는 방법이 있습니다. 1-1.IDE 사용 inteliJ 더보기 alt + alt 로 Run An..

    [자료구조] 2. 재귀함수

    [자료구조] 2. 재귀함수

    * 본 포스팅은 윤성우의 열혈 자료구조론을 읽으며 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 목차 1. 함수의 재귀적 호출의 이해 2. 재귀의 활용 3. 하노이 타워 1. 함수의 재귀적 호출의 이해 재귀함수란? 함수 내에서 자기자신을 다시 호출하는 함수입니다. 그럼, 완료되지 않은 함수룰 다시 호출하는걸까요? 입니다. 새로 메모리를 할당하여 복사본을 만들어서 실행시키는거라 아무 문제 없습니다. 단, 탈출구를 만들지 않으면 무한 재귀호출로 문제가 생기게 됩니다. 몸풀기로 팩토리얼을 수식으로 구현해 보겠습니다. 앗! n!를 전개하면 (n-1)! 부분에서 또 팩토리얼식이 나오네요! 이부분이 재귀함수로..

    [자료구조] 1. 자료구조와 알고리즘의 이해

    [자료구조] 1. 자료구조와 알고리즘의 이해

    * 본 포스팅은 윤성우의 열혈 자료구조론을 읽으며 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 목차 1. 자료구조에 대한 기본적인 이해 1-1. 필요한 배경지식 1-2. 자료구조란? 2. 알고리즘의 성능분석 방법 2-1. 측정방법 2-2. 빅오 표기법 3. 프로그래밍 문제 풀이 1. 자료구조에 대한 기본적인 이해 1-1. 필요한 배경지식 해당 책은 C언어로 짜여져 있으며, 아래의 수준을 충족시켜야 정상적으로 이해할 수 있다고 합니다. 1. 구조체를 정의하며, typedef선언을 할 줄 안다. 2. 메모리 동적 할당을 이해하고 있으며, malloc과 free에 대해 이해해야 한다. 3. 포인터 변수..

    [Spring/Intelij]Please set the JAVA_HOME variable in your environment to match thelocation of your Java installation.

    상황 spring boot을 intelij로 개발중, .\gradlew.bat clean 명령어를 사용했을때 발생 원인 환경변수 JAVA_HOME이 유요하지 않은 위치를 가르켰다. 해결 JAVA_HOME이 ~\bin까지 되어있길래 \bin을 제거 후 재시작하니 정상동작

    [Spring] MyBaits Insert 후 ID 받기 (짧)

    [Spring] MyBaits Insert 후 ID 받기 (짧)

    방법은 두가지가 있다. 1. 처럼 사용하는 방법은 useGeneratedKeys="true"를 입력하고 KeyColum은 pk table명을, keyProperty는 해당 pk값을 넣을 변수명을 입력하면 된다. 위의 경우엔 Map 타입을 매개변수로 주었다면 servicdId-pk값 쌍이 map에 추가되고 DTO 객체를 매개변수로 주었다면 DTO의 serviceId 필드값이 pk값이 될 것이다. 2. INSERT INTO CP_SERVICE VALUES SELECT LAST_INSERT_ID() 처럼 쓰는방법도 있다. 파라미터로 넘긴 Service객체에 id가 int타입으로 주입되게 된다.

    [MySQL] ON DUPLICATE KEY UPDATE [짧]

    [MySQL] ON DUPLICATE KEY UPDATE [짧]

    ON DUPLICATE KEY UPDATE란? 데이터 삽입시에 PK나 UK가 중복되었다면 지정 데이터만 업데이트 해주는 명령어이다. 단, 중복된 키가 없을경우 insert를 실행하니 잘만 사용하면 insert, update 구문을 따로 작성할 필요가 없게 구현할수 있다. 사용법 CREATE TABLE BOOK ( bId INT AUTO_INCREMENT primary KEY, bName VARCHAR(50) UNIQUE KEY, bPrice INT NOT NULL DEFAULT 0, ); 꼴의 테이블이 있다면, INSERT INTO BOOK (bName, bPrice) VALUES ('chaos_theory', 23000) ON DUPLICATE KEY UPDATE price = price + 5000;..

    [MySQL] 복합키 설정하기 [짧]

    [MySQL] 복합키 설정하기 [짧]

    복합키란? 2개이상의 칼럼을 묶어 기본키처럼 사용 sql) 생성하면서 만들기 CREATE TABLE TABLE_NAME ( COL1 VARCHAR(10) NOT NULL, COL2 int(11) NOT NULL, PRIMARY KEY(COL1, COL2) sql) 생성후에 선언하기 ALTER TABLE TABLE_NAME ADD PRIMARY KEY(COL1, COL2); gui) Work bench로 만들기 그냥 pk를 복수 선택하면 알아서 복합키로 만들어 준다.

    Permission 처리를 좀 더 쉽게 하려면? TedPermission!

    시연용 앱을 전에 제작하다가, 권한 분류랑 관리도 제대로 안해놓고 대충 다 선언해 놨더라구요... 급하게 고쳐야해서 보는데 권한쪽을 수정해야하는데 너무 스트뤠스... 그떄 정말 도움 많이 받았습니다... 쓰기 쉽고 명확한 박상권 개발자님의 ted permission 사용해 보세요! https://greensky0026.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F TISTORY 나를 표현하는 블로그를 만들어보세요. www.tistory.com

    [Kotlin] doze모드 방지, 절전모드 방지 하도록 요청하기

    [Kotlin] doze모드 방지, 절전모드 방지 하도록 요청하기

    Doze and Stanby public reference https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko 잠자기 및 앱 대기 모드에 맞게 최적화 | Android 개발자 | Android Developers 앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다. developer.android.com 절전모드로 진입하게 된다면, 아래와같은 제한사항이 생긴다. FCM을 사용해 주기적으로 활성화 시키는 방법도 있지만, 앱단에서 해결할 수 있는 방법은 아래의 코드와 같다. 제한사항 네트워크 엑세스 정지 wake lock 무시 유지보수 기간 지연 동기화 어댑터 실행 X JobScheduler 실행 X..

    [Spring] Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.

    상황 로컬에서 개발기 DB에 연결해 작업도중 잘 되다가 갑자기 해당문구가 뜨며 build가 안됨 원인 XML 형식, 특히 도입부 부분이 문제라고 찾음 해결 작업한 XML mapper중 mxl태그 앞에 s가 입력되어 있어 제거 결과 빌드 매우 잘됨 느낀점 매우매우 빡이 친다

    [Spring] 관념지향 프로그래밍(Aspect Oriented Promgramming)

    [Spring] 관념지향 프로그래밍(Aspect Oriented Promgramming)

    AOP란? 어떠한 로직을 기준으로 핵심적인 관점과 부과적인 관점으로 나눠 각각 모듈화 하는 방식이다. 관점을 기준으로 모듈화 한다는 것은, 코드를 부분적으로 나누어서 모듈화하겠다는 것. 이 관심사를 Crosscutting Concerns(흩어진 관심사)라고 부르며 이를 모듈화 한것이 Aspect이다. 주요 개념 Aspect : 흩어진 관심사를 모듈화 한 것, Target : Aspect를 적용하는 곳 Advice : 실질적인 기능을 담은 구현체 JointPoint : Advice가 적용될 위치 PointCut : JointPoint의 상세 스펙 정의. ex) A메서드 호출 전,후로 호출할 것 스프링 aop 특징 접근제어 및 부가가능을 추가하기 위해 프록시 패턴 기반의 AOP 구현체를 사용한다. 스프링 빈..

    Procedure 기본

    Procedure란? SQL Server에서 지원해주는 프로그래밍 기능입니다. 쿼리문을 메서드형식으로 만들 수 있습니다. 기본 형태 CREATE DEFINER=`user_name` PROCEDURE `procedure_name`( //받을 매개변수 ) BEGIN //query END 예제 CREATE DEFINER=`admin`@`%` PROCEDURE `practice_procedure_just_select`() BEGIN SELECT * FROM practice_table WHERE id = 1; END call query in php $query = "CALL practice_procedure_just_select();" *DEFINER MS-SQL에서는 SP에 대한 EXECUTE 권한만 있으면 O..

    Spring DI, IoC

    Spring DI, IoC

    DI (Dependency Injection) 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴이다. 두 객체 사이에 인터페이스를 둬 클래스 레벨에서는 의존관계가 고정되지 않도록 하고, 런타임시에 관계를 주입하여 유연성 확보 및 결합도 낮춘다. public class MyRoom(){ private Desk desk; } public class Desk(){ } 에서 MyRoom 객체가 Desk 객체에 의존성을 지닌다. 여기서, public class MyRoom(){ private Desk desk; public MyRoom(){ this.desk = new Desk(); } } 일 경우 결합도가 매우 높다는 문제가 발생한다. 왜냐하면, 내 방에 어떤 물건이 있는지에 대한 관심이 분리되지 않았기 떄..

    Android12, 13, 14를 지원하는 메이저 통신사 갤럭시 테스트폰 구매 가이드

    Android12, 13, 14를 지원하는 메이저 통신사 갤럭시 테스트폰 구매 가이드

    근무하면서 테스트용 폰을 서칭할 일이 있었습니다. 근데 이게 왠걸, 종류도 많고 지원정책도 좀 복잡해서 정리를 안하면 도저히 찾을수가 없겠더라구요. 저처럼 고생하지 않았으면 해서 서칭하면서 정리한 자료 공유드립니다. 개요 Android os level 12, 13, 14를 지원하거나 지원할 예정인 중고폰을 탐색, 비교적 저렴한 테스트폰을 구매하기 위해 자료 조사 OS업데이트 지원 정책 ~19년까지 기본 os업데이트 2차 지원 20년부터 일부 기기 os 업데이트 3차까지 지원 (s10이상 모든 플래그십 AND 일부 A시리즈) 22년부터 일부 기기 os 업데이트 4차까지 지원 (s21이상 모든 플래그십 AND 일부 A시리즈) android os 정보 os 업데이트 루틴 : 매년 초에 베타버전 공개, 매년 연..

    [Spring] @Scheduled cron 표현식

    [Spring] @Scheduled cron 표현식

    단위 : 범위 초 : 0~59 분 : 0~59 시 : 0~23 일 : 1~31 월 : 1~12 or JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC 요일 : 1~7 or SUN MON TUE WED THU FRI SAT 기호 : 뜻 * : 모든 값 ? : 설정 없음 (일 또는 요일에만) , : 배열 (1,2,4 : 1,2,4만) - : 앞-뒤 범위 전체(1-3 : 1부터 3까지) / : 간격 (1/10 : 1부터 10마다 1,11,21,31...) 0 0 0 * * * 매일 00시 00분 00초에 실행 0 0 3,4 * * 2-6 월요일부터 금요일 00시 00분 3시,4시마다 실행 0 0 9/2 5 * * 매월 5일 9시부터 2시까지 00분 00초에 실행 0 30 1..

    JavaBean이란? + 자바빈 규약

    JavaBean이란? + 자바빈 규약

    JavBean 이란? 뭔가 특별한 객체나 컴포넌트일 것 같지만, 그런 것이 아닙니다. 자비빈 규약을 지켜 만들어진 클래스를 'JavaBean'이라고 합니다. 자바빈 규약 1. 자바빈은 기본 패키지가 아닌 특정한 패키지에 속해야 한다. 2. 기본 생성자가 존재해야 한다. (매개변수 값이 없는 기본 생성자) 3. 멤버변수의 접근 제어자는 private여야 한다. 4. 멤버변수에 getter/setter 메서드가 존재해야 한다. 5. 4의 getter/setter 메서드는 접근 제어자가 public이여야 한다. [선택사항] 직렬화가 되어 있어야 한다. Serializable을 implemets해 직렬화 해야 합니다. [예제] public class TempBean implements Serializable {..

    WSL2 LEMP 초간단 구축 및 구동

    환경 : Windows에 WSL2를 사용한 Ubuntu 18.0.4 Windows10에서 WSL2로 Ubuntu 설치 및 구동은 아래 링크 참고 https://greensky0026.tistory.com/238 구축 1. 우분투 갱신 및 업데이트 sudo apt-get update && sudo apt-get upgrade 2. Nginx 설치 sudo apt install nginx //sudo service nginx start 구동확인 3. MySQL 서버 설치 sudo apt install mysql-server //sudo usermod -d /var/lib/mysql/ mysql 숏컷등록 //sudo service mysql start 구동확인 3-1. MySQL root 계정 비밀번호 생성 ..

    'other' has different root

    상황 aab 마는중에 에러 발생 원인 프로젝트, 키, 산출물이 같은 드라이브에 위치하도록 해야한다고 함. 참고 : https://stackoverflow.com/questions/62089862/generate-signed-bundle-errors-while-building-bundle-file-other-has-different 대처 용량문제로 SSD를 추가해, 폴더정리를 했어서 발생했었다고 판단하였음. aab 산출물만 프로젝트가 있는 드라이브로 위치를 지정했을때는 실패, 키와 산출물 디렉토리까지 프로젝트가 있는 드라이브로 이동시켰다. 결과 키와 산출물, 프로젝트를 동일한 드라이브에 위치시켜 에러없이 성공

    [짧] Android aar에 application proguard 규칙 적용시키기

    프로젝트 내부 모듈을 만들어서 작업한 경우엔 특이사항 없이 proguardFiles를 사용하면 되는데, aar의 경우 난독화를 사용헤 apk를 말아버리면, aar 소스를 apk에서 거의 못찾게 되버린다. 그래서 이게 규칙대로 적용이 됬나, 안됬나를 판단하기가 힘들어 찾아보았다. aar에 특정 프로가드 규칙을 적용시키고 싶다면, proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 대신 consumerProguardFile 'proguard-rules.pro' 를 사용하면 해당 규칙이 aar 소스까지 적용되어 난독화가 되게 된다. 물론 프로가드 규칙이 별도로 존재하지 않는다면, 애초에 해당 라인을 입력할 필요가 ..