728x90
반응형

전체 글 830

MSA 관련 북마크

futurecreator.github.io/2018/09/14/what-is-microservices-architecture/ 마이크로서비스 Microservices (1) 아키텍처 소개 주변에서 마이크로서비스 아키텍처(Microservices architecture; MSA)에 대한 이야기가 많이 들려옵니다. 마이크로서비스가 모든 것을 해결해줄 것처럼 이야기하는 사람이 있는가하면, 서비스 지향 아키 futurecreator.github.io futurecreator.github.io/2018/09/14/microservices-with-api-gateway/ 마이크로서비스 Microservices (2) API 게이트웨이 이전 포스트에서 마이크로서비스 아키텍처의 개념을 살펴봤습니다. 이번 포스트에서는 ..

Architecture/MSA 2020.11.20

아마존 한국 설명서 참 힘들다...

CodeDeploy 관련해서 설명서 보다가... 아래와 같은 링크를 보았다. https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/instances-health.html#instances-health-status CodeDeploy 인스턴스 상태 - AWS CodeDeploy CodeDeploy 인스턴스 상태 CodeDeploy는 배포 그룹의 인스턴스 상태를 모니터링합니다. 정상 인스턴스 개수가 배포 중 배포 그룹에 대해 지정한 최소 정상 인스턴스 개수 미만인 경우 배포에 실패합니 docs.aws.amazon.com '개정상태' 라고 나와서 개정이 뭘까? 란 생각이 들었다. 계정도 아니고 개정이라... 뭔가를 수정하고 정정한다는 의미인건가? 하고 ..

Develop? 2020.05.11

MySQL Window 설치 삽질 후기...

AWS에 있는 Aurora MySQL에 접속하기 위해 MySQL Workbench를 깔아 접속을 하려 하였지만 실행되자 마자 프로세스가 죽어 버리는 문제 발생. 여기 저기서 들은 말로는 .NET Framework가 설치되어 있지 않아서라는 말을 듣고 설치하려 했지만 이미 최신 버전이 깔려 있는 상태... 그래서 그냥 Workbench 말고 MySQL을 통으로 설치하려 함. 통으로 설치 하고 마지막에 뭔가 Config를 처리하는 과정에 오류 발생. 아래와 같은 이미지가 뜸 삽질은 시작 됨. 찾아 보니 컴퓨터 이름이 한글일 경우 안된다고 해서 찾아 보니 회사에서 기본으로 설정해 둔 컴퓨터 이름이 '내이름-PC' 였음 ㅠㅠ 그래서 이름 변경 후 다시 설치 하였지만 동일한 문제... MySQL 관련된 내용을 다..

Develop!/MySQL 2020.03.30

Springboot + JPA + JTA (Atomikos) + MySQL 을 이용한 멀티 트랜잭션 구현

두 개의 물리적으로 다른 Database에 트랜잭션을 적용하기 위해서 JTA를 사용해야 한다는 것을 듣고 그 중에 Atomikos를 사용하면 된다는 이야기에 구현을 해 보았다. 구글링을 해 보아도 이런말 저런말들이 많고 예전 기준으로 구현된 것도 많고 소스들이 너무나도 달라 뭘 어떻게 따라 해야 할지 막막했는데... 그리고 주로 MyBatis 기준으로 작업이 되어 있어서 답답한 감이 있었는데 JPA 기준으로 작업을 할 수 있도록 4일 정도 삽질 끝에 완성하여 백업 차원에서 기록으로 남긴다. 먼저 Legacy Database와 새롭게 사용하는 Database가 있다는 가정하에 아래와 같이 작업을 해야 한다. 먼저 사용한 의존성은 아래와 같다. build.gradle dependencies { impleme..

Java/Spring 2019.12.05

멀티 DataSource 접속 방법 정리

한 개의 프로젝트에서 하나의 Database에만 접속하는 경우가 대부분이지만, 2개 이상의 데이터 베이스에 접속하는 경우도 발생하게 된다. 이럴 경우 어떻게 셋팅을 해야 하는지 정리한다. application.yml 설정파일 spring: profiles: active: local application: name: usercms application-local.yml server: port: 9090 spring: profiles: local domain: localhost datasource-a-write: driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://a-db-url:3306/a?autoReconnect=true&useSSL=fals..

Java/Spring 2019.08.13

Spring Batch, Migration, 튜닝 및 OOM 해결 후기

회사에서 진행하는 새로운 프로젝트를 위해서 회원 정보 1,000만건에 가까운 데이터를 마이그레이션 해야 하는 작업이 필요 했다. 회원 정보만 1,000만건이고 기타 회원이 가지고 있는 부가적인 정보들을 포함하자면 거의 1억건에 가까운 데이터로 보여졌는데 이를 어떻게 마이그레이션 해야 하나 고민이 깊었다. 기존 레거시 시스템에서 새로운 시스템으로 이전을 해야 해서 내부적으로 새로운 데이터 베이스 시스템에 맞게 구조를 변경하고 적절한 로직을 가미해서 옮겨야 했기 때문에 단순 데이터 이전은 아니였다. 할줄 아는 거라고는 별로 없으니 Spring Batch를 사용할 수 밖에... 한동안 JPA를 편하게 써 와서 JPA를 사용하고 싶었지만... Bulk Insert가 없어서 저 많은 Insert문을 날리느니 안하..

Java/Spring 2019.08.12

QueryDSL 사용하기

JPA를 사용하면서 QueryDSL을 셋팅하고 사용하는 부분에 있어서 매번 헷깔려 정리한다. QueryDSL을 사용하기 위해서 build.gradle 파일에 아래의 내용을 추가 해 준다. plugins { ... id 'idea' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { ... implementation 'com.querydsl:querydsl-apt:4.1.4' implementation 'com.querydsl:querydsl-jpa:4.1.4' ... } ext { querydslSrcDir = 'src/main/generated' queryDslVersion = '4.1.4' } configuratio..

Java/Spring 2019.08.08

세상은 참으로 다양한 사람이 산다...

인종 차별이나 인격에 대한 비하 발언도 아니고....단지 팩트는...사람 간에 똑똑함과 미련함의 차이가 생각보다 크게 난다는 것이다.이미 알고 있는 사실이고...많이 느껴 왔지만...오늘 새삼 더 느끼게 된다. 취업이 힘들다 말하지 말고...본인이 왜 취업이 안되는 것인지 돌아보고 조금 더 노력해 보자... 취업이 잘 되는 사람들이 본인들보다 왜 더 잘 되는 것인지...얼마나 더 많이 노력하는 것인지...그래서 나보다 얼마나 무엇을 더 알고 있는지 돌아보자. 그 갭이 생각보다 매우 크다는 것을 깨닫게 될 것이고..그 갭을 채우려면 지금보다 더욱더 치열하게 노력하지 않은 이상...그들과 같은 레벨로 올라서기에는 한계가 있다는 것을 알게 될 것이다.

파라미터에 따라 특정 변수에 값 Set 하기

Java로 Entity를 만들고 멤버 변수로 1 ~ 31일을 만들어 둔 다음 넘오는 날짜에 따라 특정 날짜 변수에 값을 담는 작업을 하다 알게 된 내용이다. 역시 새롭게 알게 된 내용이라 정리 차원으로 올린다. MontTimeTable Entity는 아래와 같다. @Entity @EntityListeners(value = {AuditingEntityListener.class}) @Data @Table(name = "month_timetable") public class MonthTimetable { @Id @Column @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private Integer policy_inst..

Java/Spring 2018.10.24

JPA QueryDsl 에서 Group By Count 값 가져오기

JPA, QueryDsl 쓰기 참 힘들다. 그래도 하나 하나 어렵게 해 나가고 있는데 오늘은 또 Group By한 Count 개수를 반환하는 것을 만든 삽질 내용을 올린다. 리파지토리 단 소스는 아래와 같다. @Override public QueryResults getBusinessTotalCount() { QUser user = QUser.user; return from(user).where(user.userType.eq(UserType.B2B)).groupBy(user.platform).select(user.platform, user.platform.count()).fetchResults(); } 그리고 가지고 온 내용을 가지고 맵으로 이쁘게 정렬해서 반환해 주면 된다. public Map getBu..

Java/Spring 2018.09.28

RestTemplate에서 PUT으로 파라미터 전송하기

http로 값을 전송 하면서 보통 GET, POST를 많이 쓰고 PUT 으로는 전송을 잘 안하게 되는데, PUT으로 받아야 하는 API를 만들다가 값이 잘 전송이 안된다는 것을 알게 되었고, 이럴 때 어떻게 값을 전송해야 하는지 삽질의 결과물을 남겨 둔다. 보통 postman을 사용하여 값을 전송하는데 POST일 경우에는 body의 Typ을 form-data 또는 raw를 하게 된다. PUT일 경우에도 form-data 로 전송하니 값을 받을 수 없어서 이리 저리 확인해 보니 PUT일 경우에는 다음과 같이 전송 해야 한다. 이와 마찬가지로 Spring에서 RestTemplate를 이용하여 PUT 파라미터를 전송하게 될 경우 아래와 같이 하여야 한다. MultiValueMap body = new Linke..

Java/Spring 2018.09.13

Jackson ObjectMapper에서 json data를 Map이 아니라 Object로 받기

API 통신을 하면 보통 데이터 외에 Code나 Message가 같이 오고, 필요한 데이터는 한번 가공해서 받아야 한다. 그런데 이렇게 받게 되는 경우 안의 데이터가 무조건 HashMap으로 받아지게 된다. 이런 경우에 원하는 Object로 받기 위해 제네릭을 사용해 보았지만 역시 맵으로만 받아지게 되어서 구글링을 통해 해결하였다. 다음과 같은 방법으로 사용하면 된다. import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.core.type.TypeReference; String response = restTemplate.p..

Java/Spring 2018.09.12

캐릭터셋에 대한 고민...

회사에서 sms 발송 시 특정 문자가 깨져 나가는 문제가 발생...sms 발송 시스템은 "세X 텔레X"을 사용 하는데 특정 DB에 값을 넣어 두면 jar로 실행 되는 데몬이 해당 DB 값을 읽어서 발송 하는 방식임.DB에 값이 들어갈 때까지 UTF-8 형식이고 깨지지 않고 들어가는데, 실제 폰에서 받아 보기만 하면 깨지는 상황.깨지는 문자는 "–" 임. 일반 키보드에서 치는 "-"와는 다르고, 워드나 한글 등에서 copy & paste 한 것으로 보임.실제 폰에서 받아 볼 경우 해당 문자는 "?"으로 치환 되어 옴. 해당 현상을 재현 하기 위해 php에서 테스트 해 보았으나 재현 안되고Java에서는 아래와 같은 방식으로 재현 됨. 콘솔에 찍힌 결과 값은 아래와 같음.euckrString : 201? 21..

Develop! 2018.03.21

[삽질] stomp, sockjs를 이용하여 websocket 연결 시 info 가 404로 나오는 경우

WebSocket을 이용하여 특정 내용을 처리하는 로직을 개발 중에 삽질한 내용을 정리 차원에서 올린다. 클라이언트는 SockJS와 stompClient를 이용하였고, 서버는 Spring에서 기본적으로 정리한 내용을 크게 바꾸지 않은 상태로 코딩 하였다. 전반적으로 코드의 내용은 https://spring.io/guides/gs/messaging-stomp-websocket/ 에서 나오는 내용과 거의 다르지 않다. 다만 해당 내용을 코딩 중에 sockjs에서 websocket 서버의 "endpoint/info?timestamp" 와 같은 주소를 찾지 못하는 경우가 발생 했다. 이로 인해 서버의 특정 모듈 Dependency가 잘못 되던가, 알지 못하는 문제로 인해 발생 하는 것인줄 알고 프로젝트를 Spr..

Java/Spring 2018.03.13 (4)

Ajax form data를 Query String으로 전달 시 % 값이 사라지는 문제

특정 폼에 %가 들어가는 경우 DB에 저장이 안되는 이슈가 발생하여 수정하는 중에 삽질하게 된 내용을 정리 차원에서 기록한다. 대부분 %의 문제는 DB에 SQL Injection이나 XSS 등의 문제를 회피하기 위해 발생하는 현상이라서 DAO 처리 과정 중에 문제가 발생 한 것이 아닐까란 추측으로 디버깅을 해 보았으나 SQL Prepare가 잘 되어 있었다. 고로 DAO 상에서 발생하는 문제는 아니라는 결론... 그럼 서버 단의 Filter에서 파라미터를 잘라 먹는 것은 아닐까란 생각으로 이미 만들어진 보안 Filter를 찾아서 몇 시간 삽질 했으나 이미 Filter에 값이 들어오기 전 부터 없어진 다는 것을 확인. 그럼 스크립트의 문제인 것인가?란 의문을 가지고 개발자 도구에서 console.log 로..

Java8의 for, stream foreach, parallelStream foreach 간단 속도 테스트

Java8에 들어간 stream, parallelStream이 좋다는 이야기만 듣고 대충 개념만 이해한 상태에서... "그냥 좋겠지"란생각으로 쓰려다... 간단하게 테스트 해보고 정리 ^^ 참고로 로컬 PC에서 돌렸으며, 로컬 PC의 물리 cpu 코어 개수는 4개이다. import java.util.ArrayList; import java.util.List; public class StreamTest { public static void main(String[] args) throws InterruptedException { List intList = new ArrayList(); // 테스트할 loop의 개수... for (int i = 0; i { if(integer % 1000 == 0) { Sys..

Java 2017.02.14

원격지의 이미지 파일을 읽어서 원하는 곳에 업로드 하기

보통 개발 시에 파일 업로드를 하려 하면 html form에서 multipart/form-data로 파일을 선택해서 업로드 하고, 이를 서버 단에서 받아 처리를 하게 된다. 하지만 이런 방법이 아니라 원격지의 이미지 파일을 읽어온 후 필요 시 리사이지, 그리고 나서 다시 다른 곳에 있는 서버로 파일을 업로드 하는 기능이 필요해 개발을 하다 보니, 많이 사용되는 방법이 아니기에 정리해 둔다. import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URL; import java.nio.file.Files; impor..

Java 2017.02.09

코딩 하면서 유용한 Tool Site

코딩하면서 유용하게 사용하고 있는 사이트들이 몇 개 있는데... 자주 사용하다 보니... 그냥 이렇게 정리해 두고 필요할 때 끄집어 내서 사용하면 좋겠다 싶어 정리 ^^ 순서는 중요도랑 아무 상관 없이... 그냥... 1. Json online Editor http://www.jsoneditoronline.org/ JSON Editor Online - view, edit and format JSON online Ooops! Looks like you opened the website of jsoneditoronline having the url prefixed with www, whilst the official url doesn't have this prefix. You will be redirecte..

Develop!/etc 2017.01.24

잡설...

요즘 주변에서 일어나는 일들을 보면서 드는 생각들을 적어본다.정리된 생각이 아니니... 주저리 주저리 잡설이 될 듯 싶다. * 개발을 잘 한다는 의미는 무엇일까? 한 쪽 사람은 다른 사람을 개발 못한다고 욕하고, 다른 쪽에서는 이 사람을 개발 못한다고 욕한다.요즘 드는 생각으로는 뭐가 개발을 잘하는 것이고, 뭐가 못하는 것인지... 이제 잘 모르겠다는...예전에는 뭔가 명확한 원칙, 기똥찬 코딩 실력...여러가지 어려운 전문용어...새로운 개념 도입... 깔끔한 정리 등등뭔가 개발 잘하는 것에 따라오는 수식어들이 있었는데...상황에 따라, 권력을 쥐고 있는 사람에 따라 관점이 달라지듯... 개발을 잘 하는 지의 여부도 달라지는 현상을 본다. 그냥 정확하게 알게 된 결론은...서로 잘난척을 할 뿐...뭐가..

바이크의 꿈은 날라가고...

야마하 mt-03 타고 싶은데...배기량 때문에 2종 소형이 필요해서... 학원을 알아 봤는데...마나님이 안된다고 하셔서 야마하 mt-03은 꿈을 버리게 되었습니다. 그래서 좀 배기량 작은 스쿠터는 어떨까 하고 검색하다가 우연찮게... 이뻐 보이는 스쿠터가 있어서... http://storefarm.naver.com/lsl19690/products/485629786 요놈 ㅎㅎ사고 싶어 마나님에게 링크를 보냈더니...단박에 거절 ㅠㅠ ( 저 죽으면 어떻게 가족이 먹고 사냐고... 바퀴 2개 짜리는 안된다네요 ㅠㅠ) 그냥 오래된 구아방이나 몰고 다녀야 겠네요 ㅠㅠ

인생이야기 2016.11.16

사회 생활 잘 한다는 말의 의미는...

얍삽하다는 의미인 것 같다...그런 사람들이 알아서 먼저 살길 찾아가는 것 같고... 그러다 보면 가만히 있는 사람이 쓰레기 청소 다 하고... 피해 보는 것 같다. 알아서 살길 찾아 가는 것 까지야 뭐라 안하는데...가기 전까지 왜 이리 잘난척 다하면서, 조직에 혼신을 다 바칠 것처럼 하면서...이제와서 나 몰라라 하는거냐 -.-;; 그렇게 살지마라...

HTML5 Canvas를 이용한 브라우저에서 이미지 용량 줄이기

이 역시 티몬 구매후기에서 이미지 업로드와 관련된 기능을 적용하면서 나온 내용을 정리 차원에서 적어 둡니다. 구매후기 작성 시 이미지를 선택해서 업로드를 하게 되는데, 기존에는 이미지의 사이즈를 제한하는 기능이 있었고 이로 인해 이미지 제한에 걸려 이미지를 업로드 하지 못하거나, 업로드 된 원본 이미지도 용량이 너무 큰 문제가 있었습니다. (장당 3MB) 아무런 제약 없이 이용자는 이미지를 마음껏 올릴 수 있으려면 이미지 리사이즈가 필요한데, 서버단에서 용량 리사이징을 하게 되면 아까운 네트웍 비용이 들어가게 되므로 클라이언트 단에서 용량을 줄일 필요가 있었습니다. 그래서 사용하게 된 것이 HTML5의 Canvas 기능이죠. 물론 이전에 HTML5를 제대로 사용해 본 적이 없어서... 모든 기능은 최고의..

Develop!/script, Ajax 2016.11.09 (4)

이미지 파일 업로드 오류 수정 기록...

구매후기 이미지 업로드에서 오류가 나고 있어서 해당 내용을 검토 중에 알게 된 내용을 정리합니다. 기본적으로 아래와 같은 방식으로 업로드가 되고 있습니다. 브라우저 -> php -> Java 그런데 문제는 어느 한쪽의 문제가 아니라 php, Java 둘다 문제가 발생... 그리고 문제의 원인은 둘다 Version Up이였습니다. 1. 먼저 Java Error Message가 "Required MultipartFile parameter 'file' is not present" 라고 발생. 구글링 하니 http://stackoverflow.com/questions/25830503/spring-mvc-http-status-400-required-multipartfile-parameter-file-is-not-..

Java/Spring 2016.11.08

Spring Batch(스프링 배치)에서 작업 시간이 길어지는 경우

Spring Batch를 그닦 많이 써본 경험이 없지만, 특정 요구 사항이 있어서 개발하게 되었습니다.작업을 하면서 겪은 오류를 어떻게 해결 했는지 History 및 Backup을 위해 적어 둡니다. 보통 배치는 Reader와 Writer로 구분합니다.특정 정보를 Reader에서 읽어 들여서 필요한 내용을 가공하고 Writer에서 필요한 행동을 합니다. 그런데 Reader에서 정보를 읽어 들이고 가공하는 시간이 오래 걸리면서 Writer에서 DB Connection을 못 찾게 되고, Writer 작업을 수행하지 못하게 되는 경우가 발생했습니다. 구글링을 한 결과 "autoReconnect 값을 true로 해라", "validationQuery를 날려라" 등등이 나왔지만 유효하지 않은 해결책이였습니다. 결..

Java/Spring 2016.10.27

PHP curl로 파일 전송할 때 mime type 같이 전송하기

필요에 의해 html -> php -> java api로 파일을 전송해야 할 일이 생겼다. Java Api는 UI에서 바로 사용하면 안되는 상태라서 php를 거쳐 가야 하는데 html에서 올린 파일을 Java API로 전달 하는 과정이 생각보다 쉽지 않아 정리 차원에서 글을 남긴다. Html에서 php로 파일을 올리게 되면 $_FILES 라는 전역변수 안에 정보가 담기고, 실제 파일은 php.ini에서 지정한 임시 디렉토리에 저장된다. 해당 경로는 $_FILES['업로드한 html form name']['tmp_name'] 에 저장되어 있으며, 해당 파일을 다시 Java API 쪽으로 넘겨 주면 된다. 넘겨주는 방법은 curl을 사용하면 된다. 다음과 같은 방법으로 하면 된다. $headers = arr..

Develop!/php 2016.05.23

List에서 특정 요소 제거하기

List에서 불필요한 item을 제거하기 위해 loop를 돌리게 되면 제거 후 size가 맞지 않는 일로 인해 null point exception을 만나기가 쉽다. 이럴 경우 제대로 된 방법이 무엇인지는 모르지만... 실제로 돌려보고 Exception이 나지 않은 방법을 찾아 정리 차원에서 남겨 둔다. 검색해서 참고한 URL은 https://stackoverflow.com/questions/17279519/removing-items-from-list-in-java/17279565#17279565?newreg=0dee1db24aaa4154a0cebdc173ed5aeb List toRemove = new ArrayList(); for(Object a: list){ if(a.getXXX().equalsIgn..

Java/Etc 2016.02.11

php의 람다식, 가변 함수

오랜만에 php 코드를 들여다 볼 일이 생겼는데, 알지 못할만한 소스코드들이 있어 헤메다가 정리 차원에서 적어둔다. 1. php의 람다식. http://php.net/manual/kr/function.array-walk.php array_walk($data, function(&$value, $key, $joinUsing) { $value = $key . $joinUsing . $value; }, $glue); array_walk의 2번째 인자값을 function 변수로 넘길 수도 있지만 위에처럼 람다식으로 그냥 적어버릴 수 있다. 안드로이드에서 Callback 함수로 람다식으로 적는 경우가 많은데, 그런식으로 작성하나 보다. 오랜만에 php 하니 새롭다 ^^;; 2. 가변함수 이런말 첨 들어보는데, 위의..

Develop!/php 2015.08.20

MySQL의 Float, Double에서 Length와 Decimal이 의미하는 것...

위도와 경도를 표기하기 위해서 DB Column을 만드는 중 알게 된 내용을 정리해 본다.정확한 내용이 아닐 수도 있으니 참고 사항으로만 보길... MySQL에서 float, double 타입을 Create할 때 float(length, decimals) 와 같은 형식으로 만든다.여기서 length와 decimal이 의미하는 내용이 정확히 무엇인지 알기 위해 구글링을 했지만, 매뉴얼에나 나올법한 알아듣지 못할 소리를 번역기로 돌린 듯한 글만 있... 그래서 좀더 검색해 보니 얻어 걸린 글에서 아래와 같은 내용이 보였다. https://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html M(length)는 전체 길이 즉 정수 부분과 소수 부분을 합친 길이..

Develop!/MySQL 2015.06.02
728x90
반응형