참고 링크
 - https://roadmap.sh/roadmaps

 

Developer Roadmaps

Community driven roadmaps, articles, guides, quizzes, tips and resources for developers to learn from, identify their career paths, know what they don't know, find out the knowledge gaps, learn and improve.

roadmap.sh

 

 

 

Java의 java.time.LocalDateTime관련 자주 사용하는 몇 가지를 메모 목적으로 정리합니다.

  • 예전 java 1.7까지는 joda를 많이 사용했고, Java기본 패키지에 포함된 이후에도 바쁘면 joda를 사용했습니다.
  • 가능하면 java 기본 패키지를 사용하는게 좋습니다.
  • 계속해서 내용은 추가할 예정입니다.

 

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;

/**
 * Java의 java.time.LocalDateTime 관련 몇가지 사용 예 - 작성중
 * - joda를 많이 썻던 개발자들을 위해 샘플 작성
 *
 * @author
 */
public class LocalDateTimeSample {

	public static ZoneId pstZoneId = ZoneId.of("America/Los_Angeles"); //PST는 ZoneId가 'America/Los_Angeles' 임
	public static ZoneId pdtZoneId = ZoneId.of("GMT-07:00"); //PDT는 ZoneId가 'GMT-07:00' 임. 참고: https://savvytime.com/converter/pdt-to-kst-utc/aug-1-2021/3am

	public static DateTimeFormatter FMT_YMDHIS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

	/**
	 * Java의 java.time.LocalDateTime 관련 몇가지 샘플
	 *
	 * @param args
	 */
	public static void main(String[] args) {

		System.out.println("\n");

		final Date now = new Date();

		System.out.println(String.format("java.util.Date 타입의 현재 일시: %s\n\n", now));

		LocalDateTime ldt = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault());
		System.out.println(String.format("java.util.Date를 java.time.LocalDateTime 로 변환:%s\n", ldt));

		//혹은 아래와 유사하하게 Date객체로 변환 가능
		//Instant instant = utcZonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime().atZone(ZoneId.of("UTC")).toInstant();
		//java.util.Date.from(instant);

		final String pattern = "yyyy-MM-dd-HH:mm";
		System.out.println(String.format("LocalDateTime을 패턴 '%s'으로 포맷팅: %s\n", pattern, ldt.format(DateTimeFormatter.ofPattern(pattern))));

		System.out.println(String.format("1일 후는: %s", ldt.plusDays(1).format(FMT_YMDHIS)));
		System.out.println(String.format("3일전은: %s", ldt.minusDays(3).format(FMT_YMDHIS)));

		String ymd = "20220501";

		DateTimeFormatter fmtYmd = DateTimeFormatter.ofPattern("yyyyMMdd");
		LocalDate dateYmd = LocalDate.parse(ymd, fmtYmd);
		System.out.println(String.format("%s 문자열을 포맷팅 후 date객체 변환 결과: %s", ymd, dateYmd));

		LocalDate toDay = LocalDate.now();
		System.out.println(String.format("오늘은 '%s' 입니다.", toDay));
		System.out.println(String.format("이번달의 1일은 '%s' 입니다.", toDay.withDayOfMonth(1)));

		System.out.println("\n");
		ZoneId defaultZoneId = ZoneId.systemDefault();
		Date firstMonthDayDT = Date.from(toDay.atStartOfDay(defaultZoneId).toInstant());
		System.out.println(String.format("이번달의 1일의 java date타입은 '%s' 입니다.", firstMonthDayDT));

		System.out.println("\n");
		System.out.println("원본 LocalDateTime: " + ldt);
		System.out.println("\t초 미만 절삭: " + ldt.truncatedTo(ChronoUnit.SECONDS));
		System.out.println("\t분 미만 절삭: " + ldt.truncatedTo(ChronoUnit.MINUTES));
		System.out.println("\t시간 미만 절삭: " + ldt.truncatedTo(ChronoUnit.HOURS));
		System.out.println("\t일 미만 절삭: " + ldt.truncatedTo(ChronoUnit.DAYS));
	}
}

 

결과

코드 실행 결과

 

1. 쿼리 부분 예

<!-- 해당 유저ID가 존재하는지 체크(존재시 1 리턴으로 boolean 체크됨) -->
<select id="isExistUser" parameterType="String" resultType="boolean">
    /* user.isExistUser */
    SELECT
    EXISTS
    (SELECT 1 FROM user WHERE user_id = #{userId} LIMIT 1) #LIMIT 1은 없어도 무방하지만 방어차원에서
</select>



2. java부분 예(DAO영역)

public boolean isExistUser(String userId) {
    return sqlSession.selectOne(NAMESPACE + "isExistUser", userId);
}

Spring valid 자주 사용하는 내용/샘플 정리

 - 필요시 복붙 목적으로 메모해둔 글인점을 감안해주세요

 

//${validatedValue}를 이용하면 검증대상 값을 가져올 수 있음
@NotBlank(message = "'authKey' cannot be null or empty")
@Size(max = 50, message = "The 'authKey' must be a maximum of {max}. But the request is [${validatedValue}].")
private String authKey;

nginx 설정시 이정도는 알아야함

 - https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/

 - 참고링크: https://news.hada.io/topic?id=6041

 

  1. 워커당 File Descriptor가 충분하지 않음
  2. error_log off 는 없음
    access_log 는 off가 되지만, error_log는 off가 되지 않음. 이러면 off 이름을 가진 에러 로그 파일이 생성
  3. 업스트림 서버 연결에는 Keepalive를 활성화할 것
  4. 지시문 상속이 동작하는 방식 제대로 알기
  5. proxy_buffering off 사용 금지
  6. if 지시문의 잘못된 사용
  7. 과도한 헬스 체크 금지
  8. Metric 접근에 보안 설정하기
  9. 모든 트래픽이 같은 /24 CIDR 블록에서 오는 경우에는 ip_hash 대신 hash $binary_remote_addr consistent 사용
  10. 업스트림 그룹의 장점 활용하기

 

 

 

참고 링크 

 - https://sas-study.tistory.com/410

 - 

 

코드 샘플

import org.springframework.security.core.annotation.AuthenticationPrincipal;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account")
public @interface CurrentUser {

}
  1. 신규 개발자 입사 또는 성능 문제 발생시 공유하는 java 코딩 방법
  2.  모두 지킬 수는 없지만 알고 있으면 좋은 내용


p.s. 생각날때 개인 의견 추가 및 링크들 추가 예정

AWS에서 Redis(Elastic cache)사용시 모니터링 등에 사용하는 커맨드
 - 예) 리얼 환경에서 사용하면 안되는 커맨드가 가끔 개발자 실수로 반영될 수 있음(예. keys)

-- redis에 keys 커맨드가 실행되고 있는지 모니터링하는 커맨드
 redis-cli -h 도메인혹은IP monitor | grep keys
  - 예) redis-cli -h 블라블라.apn2.cache.amazonaws.com monitor


-- redis에 접속되어있는 유니크한 클라이언 IP 리스트 확인 커맨드
redis-cli -h redis서버호스트 CLIENT LIST | awk '{print $2}' | sed s/:.*//g | sort -u

 


AWS ec2에 redis-cli설치하는 방법

# make 하기 위해서 gcc 다운
sudo yum install -y gcc

# redis-cli 설치 및 make
wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make

#src/redis-cli 에서 사용 가능
예) ./redis-cli -h 'redis 호스트 도메인' -p '포트번호'

 

+ Recent posts