전체 글
- JavaScript image 압축 오픈소스 2021.08.20
- 좋은 SW개발자가 되기 위한 기준 또는 적성 판단 2021.08.20
- MIT라이센스의 bootstrap admin 템플릿 2021.08.20
- 이메일을 이용한 업무처리 방법(논리적인 메일 커뮤니케이션 방법 등) 2021.08.10
- java 2글자국가코드_및_국가명_리스트조회 프로그램 2021.08.05
- Hyperledger fabric- 블럭체인 플랫폼 2021.05.21
- spring boot sitemap 생성하기 2021.05.02 2
- mysql + java + JPA + querydsl 성능개선 관련 몇 가지 내용 2021.05.01
JavaScript image 압축 오픈소스
2021. 8. 20. 15:08
좋은 SW개발자가 되기 위한 기준 또는 적성 판단
2021. 8. 20. 11:00
SW개발자로서 적성에 맞는지? 혹은 괜찮은 개발자인지 판단에 도움이 될만한 내용을 생각날때마다 정리하는 글입니다.
- 주의: 해당 내용은 업계 선배분들이 얘기한 것도 있지만, 제 주관적인 생각도 있기 때문에 다른 분들과 생각이 다를 수 있습니다.
- 평생 학습할 수 있어야 합니다.
- 기술 발전이 빠른 업종이고, 새로운 기술로 어려운 문제를 쉽게 풀 수 있기 때문입니다.
- 처음 HDFS(하둡)를 봤을때 놀랐죠. 그전에는 1대의 머신에서만 어떻게든 문제 해결해야한다는 생각이 강했는데 여러 컴퓨팅파워를 이용해서 big data처리라니.. 어떻게든 오라클 SP 최적화하고 있었는데.. 요즘 elastic search의 클러스터도 그렇고요
- 기술 발전이 빠른 업종이고, 새로운 기술로 어려운 문제를 쉽게 풀 수 있기 때문입니다.
- 팀플레이를 할 수 있어야합니다.
- 요즘에는 혼자 개발해서 서비스하기에는 SW규모가 너무 커졌습니다. 팀으로 서비스를 만들어야하는데 팀플레이가 안되면 곤란하죠.
- 끊기 있게 엔지니어링 문제를 열심히 풀 수 있어야합니다.
MIT라이센스의 bootstrap admin 템플릿
2021. 8. 20. 10:44
- MIT라이센스(수정, 배포가 자유로움)의 bootstrap admin 템플릿
- toy프로젝트 등을 개발할때 사용
- https://github.com/ColorlibHQ/AdminLTE
- 업무용으로는 돈주고 구매한 inspinia를 보통 사용
- Extended 버전이 100불정도였던것 같은데 현재 1400불(엄청 올랐네요. 개인적으로도 하나 구매해두려다가 안했는데 후회가..)
- https://wrapbootstrap.com/theme/inspinia-responsive-admin-template-WB0R5L90S
이메일을 이용한 업무처리 방법(논리적인 메일 커뮤니케이션 방법 등)
2021. 8. 10. 13:11
참고
- 이메일을 주 커뮤니케이션 방법으로 사용하는 회사에서 근무시, 새로 입사하는 직원들에게 조언해주는 내용입니다.
1. 이메일은 두괄식으로 작성
2. 수신자가 많을시 To(받는사람)를 정확하게 명시
3. 이메일로 요청받은 업무가 시간이 걸린다면, 우선 선 회신을 진행(언제까지 확인 후 추가 회신한다는 형태로)
- 발송자는 수신자가 업무를 F/U 한다는 내용을 인지시킴
4. 이메일 자동분류, 강조처리 기능 등을 사용해서 중요 이메일을 놓치지 않도록 함
- 모바일 앱의 알림 설정도 진행
5. 읽지 않은 메일 숫자가 과하게 존재하면 안됨(모든 이메일은 확인 및 처리가 필요, 특히 본인이 수신자인 경우)
기타 참고 : https://pathmaker.tistory.com/182
'기타' 카테고리의 다른 글
개발 직군 Roadmaps (0) | 2022.04.27 |
---|---|
채용시 나의 기준 (0) | 2021.11.05 |
Hyperledger fabric- 블럭체인 플랫폼 (0) | 2021.05.21 |
RESTful API 설계에 대한 개인적인 생각 - 1 (0) | 2021.04.29 |
jenkins에서 job을 실행한 유저 정보를 얻는 방법 (0) | 2020.10.07 |
java 2글자국가코드_및_국가명_리스트조회 프로그램
2021. 8. 5. 15:25
간단한 Testcase로 확인용 작성
@Test
void 두글자국가코드_및_국가명_리스트조회() {
String[] countries = Locale.getISOCountries();
//Arrays.stream(countries).forEach(System.out::println); //2글자 국가코드 리스트 확인
for (String country : countries) {
Locale l = new Locale("en", country);
System.out.println(String.format("2글자 국가코드(ISO 3166-1 alpha-2): %s | 영문 국가명: %s | 한글 국가명: %s ", country, l.getDisplayCountry(new Locale("en")),
l.getDisplayCountry(new Locale("ko"))));
}
System.out.println("countries 갯수: " + countries.length);
Assertions.assertNotNull(countries);
Assertions.assertTrue(countries.length >= 200); //2021년기준 249개국이 존재.(200개 국가 이상을 assert 체크 기준으로 함)
}
'JAVA > Java 일반' 카테고리의 다른 글
CSV파일을 읽어서 파싱하여 DB(Mysql)에 저장하는 프로그램 샘플 (0) | 2021.11.12 |
---|---|
CSV파일 파싱 샘플(with apache commons-csv) (0) | 2021.11.12 |
mysql + java + JPA + querydsl 성능개선 관련 몇 가지 내용 (0) | 2021.05.01 |
java stream filter를 이용한 중복 제거 방법(샘플) (0) | 2021.04.06 |
java 사설인증키 처리 - 1 (0) | 2021.03.31 |
Hyperledger fabric- 블럭체인 플랫폼
2021. 5. 21. 18:35
'기타' 카테고리의 다른 글
채용시 나의 기준 (0) | 2021.11.05 |
---|---|
이메일을 이용한 업무처리 방법(논리적인 메일 커뮤니케이션 방법 등) (0) | 2021.08.10 |
RESTful API 설계에 대한 개인적인 생각 - 1 (0) | 2021.04.29 |
jenkins에서 job을 실행한 유저 정보를 얻는 방법 (0) | 2020.10.07 |
HTTP 응답헤더에 서버 종류 삭제 - 보안처리 목적 (0) | 2020.07.10 |
spring boot sitemap 생성하기
2021. 5. 2. 19:21
참고
- site map 설명 링크
코드
- 참고 링크
@RestController
public class TestController {
@Autowired
private RequestMappingHandlerMapping re;
@GetMapping("/sitemap.xml")
public String getSitemap() {
Map<RequestMappingInfo, HandlerMethod> handlerMethods = re.getHandlerMethods();
List<String> urls = new ArrayList<>();
for (Entry<RequestMappingInfo, HandlerMethod> entry : handlerMethods.entrySet()) {
urls.addAll((entry.getKey().getPatternsCondition().getPatterns()));
}
// Construct XML response from urls and return it
}
}
'JAVA > Spring 일반' 카테고리의 다른 글
자주 사용하는 Spring valid관련 내용들 - 메모 (0) | 2022.04.05 |
---|---|
logback file appender 설정 (0) | 2021.08.26 |
springboot + webflux + websocket 공부 - 2 (0) | 2020.09.23 |
springboot + webflux + websocket 공부 - 1 (0) | 2020.09.23 |
spring model mapper 성능 관련 (0) | 2020.08.09 |
mysql + java + JPA + querydsl 성능개선 관련 몇 가지 내용
2021. 5. 1. 13:44
메모 목적의 글로써 생략되는 내용이 많이 있을 수 있는점을 감안해주세요
(우아콘 2020참고)
- querydsl exist 사용 금지
- 기본
- sql의 exist는 조건을 만족하는 1번째 row를 만나면 쿼리가 바로 종료
- count의 경우는 모든 row를 scan해야하기 때문에 성능이 exist보다 안 좋음
- qeurydsl의 exist는 count 쿼리를 이용해서 수행되기 때문에 성능이 안 좋음
- 직접 구현
- limit 1을 추가함(예전에 mysql 생쿼리로 개발할때도 이렇게 했었음..)
- 다만, 조회결과가 없으면 0이 아니라 null을 반환하니 null 체크처리 주의
- limit 1을 추가함(예전에 mysql 생쿼리로 개발할때도 이렇게 했었음..)
- 기본
- cross join 회피
- 나올수 있는 모든 경우의 수를 대상으로 하기때문에 성능이 안좋은 cross join. 피하는게 좋음
- querydsl은 묵시적 join사용할때 cross join발생할 수 있음
- 명시적 join으로 회피
- 예) innerJoin 메소드로 명시적 처리
- Entity 보다는 DTO를 우선 사용
- entity 조회시
- 실시간으로 Entity 변경이 필요한 경우에는 장점 -> 다만 회사 프로덕션 환경에서 이럴일은 없음
- hibernate 캐시 불필요
- 불필요한 컬럼 조회
- OneToOne N+1 쿼리 등
- 단순 조회 기능에서는 성능 이슈 요소가 많음
- DTO 조회시
- 고강도 성능 개선, 대량의 데이터 조회가 필요한 경우
- 조회 컬럼 최소화하기
- as 표현식으로 대체하면 DB에실행되는쿼리에서 as컬럼은 제외됨
- 예) Expressions.asNumber(bookNo).as("bookNo")
- as 표현식으로 대체하면 DB에실행되는쿼리에서 as컬럼은 제외됨
- Select 컬럼에 Entity 자제
- 불필요 신규 Entity의 모든 컬럼이 조회될 수 있음
- OntToOne 관계에 대해서 매건마다 조회됨(N+1무조건 발생하게 됨)
- entity 조회시
- Group by 최적화
- mysql에서는 order by null 을 이용하면 file sort가 발생하지 않는 기능이 존재(개인적으로도 많이 사용)
- querydsl에서는 order by null을 지원하지 않기 때문에 직접 구현해서 사용
- 정렬이 필요하더라도 조회결과가 100건 이하라면 어플리케이션에서 정렬하는걸 고려(페이징이 아닐때만)
- was는 scale out이 가능하지만 DB는 어려움
- 정렬이 필요하더라도 조회결과가 100건 이하라면 어플리케이션에서 정렬하는걸 고려(페이징이 아닐때만)
- 커버링 인덱스 사용
- 개인적으로도 대용량 게시판 서비스의 페이징 개념 만들대 사용함
- jpql은 from절의 서브쿼리를 지원하지 않기 때문에 우회처리가 필요
- 쿼리를 2개로 나눠서 실행
- Cluster Key(PK와 같은)를 커버링 인덱스로 빠르게 조회하고
- 조회된 Key로 select쿼리를 in 쿼리로 실행
- 쿼리를 2개로 나눠서 실행
- update 최적화
- 무분별한 DirtyChecking을 꼭 확인해야함
- 실시간 비지니스 처리, 실시간 단건 처리시
- 하이버네이트 캐시는 일괄 업데이트시 캐시 갱신이 안되기때문에
- Querydsl.update
- 대량의 데이터를 일괄로 Update 처리시
- 실시간 비지니스 처리, 실시간 단건 처리시
- 무분별한 DirtyChecking을 꼭 확인해야함
- bulk insert
- JPA에서는 auto_increment일때는 insert합치기가 적용되지 않는 문제가 있음
- jdbcTemplate롤 bulk insert는 처리 가능하나, 컴파일 체크, Type-safe 개발이 어려움
- 문자열로 쿼리를 작성해야해서
- 따로 개발해서 진행할수도 있지만... 개인적으로 고민좀 되는 부분이 있음
'JAVA > Java 일반' 카테고리의 다른 글
CSV파일 파싱 샘플(with apache commons-csv) (0) | 2021.11.12 |
---|---|
java 2글자국가코드_및_국가명_리스트조회 프로그램 (0) | 2021.08.05 |
java stream filter를 이용한 중복 제거 방법(샘플) (0) | 2021.04.06 |
java 사설인증키 처리 - 1 (0) | 2021.03.31 |
금칙어 처리(with Aho corasick 알고리즘) (0) | 2020.11.12 |