Skip to content

Commit

Permalink
Merge pull request #392 from 6QuizOnTheBlock/be/feat/#391-Code-smell-โ€ฆ
Browse files Browse the repository at this point in the history
โ€ฆrefactoring

Be/feat/#391 code smell refactoring
  • Loading branch information
dalcheonroadhead authored May 26, 2024
2 parents d0e3448 + 7cfda11 commit 3090b96
Show file tree
Hide file tree
Showing 20 changed files with 159 additions and 91 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package com.quiz.ourclass.domain.member.controller;

import com.quiz.ourclass.domain.member.controller.docs.MemberControllerDocs;
import com.quiz.ourclass.domain.member.dto.TokenDTO;
import com.quiz.ourclass.domain.member.dto.request.DefaultImageRequest;
import com.quiz.ourclass.domain.member.dto.request.DeveloperAtRtRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberSignInRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberSignUpRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberUpdateRequest;
import com.quiz.ourclass.domain.member.dto.request.UpdateFcmTokenRequest;
import com.quiz.ourclass.domain.member.dto.response.DefaultImagesResponse;
import com.quiz.ourclass.domain.member.dto.response.MemberMeResponse;
import com.quiz.ourclass.domain.member.dto.response.MemberUpdateResponse;
import com.quiz.ourclass.domain.member.dto.response.OIDCPublicKeysResponse;
import com.quiz.ourclass.domain.member.service.MemberService;
import com.quiz.ourclass.domain.member.service.client.KakaoOicdClient;
import com.quiz.ourclass.domain.quiz.dto.request.QuizStartRequest;
import com.quiz.ourclass.domain.quiz.dto.response.QuizStartResponse;
import com.quiz.ourclass.global.dto.MemberSimpleDTO;
import com.quiz.ourclass.global.dto.ResultResponse;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -26,7 +32,6 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand All @@ -41,37 +46,31 @@ public class MemberController implements MemberControllerDocs {
/* 1. ํšŒ์›๊ฐ€์ž… */
@PostMapping(value = "/", consumes = {MediaType.APPLICATION_JSON_VALUE,
MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<ResultResponse<?>> signUp(@ModelAttribute MemberSignUpRequest request) {
public ResponseEntity<ResultResponse<TokenDTO>> signUp(
@ModelAttribute MemberSignUpRequest request) {
return ResponseEntity.ok(ResultResponse.success(memberService.signUpProcess(request)));
}

/* 2. ๋กœ๊ทธ์ธ */
@PostMapping("/sign-in")

public ResponseEntity<ResultResponse<?>> signIn(@RequestBody MemberSignInRequest request) {
public ResponseEntity<ResultResponse<TokenDTO>> signIn(
@RequestBody MemberSignInRequest request) {

return ResponseEntity.ok(ResultResponse.success(memberService.signInProcess(request)));
}

/* 4. ํ…Œ์ŠคํŠธ์šฉ */
@GetMapping("/kakao-keys")
public ResponseEntity<ResultResponse<?>> getKakaoKeys() {
public ResponseEntity<ResultResponse<OIDCPublicKeysResponse>> getKakaoKeys() {

return ResponseEntity.ok(ResultResponse.success(kakaoOicdClient.getKakaoOIDCOpenKeys()));
}

/* 5. id-Token ๋ฐ›์•„์„œ Decoding ํ•˜๊ธฐ */
@PostMapping("/decode-id-token")
public ResponseEntity<ResultResponse<?>> decodeIdToken(@RequestParam String idToken) {
log.info(idToken);
// return ResponseEntity.ok(ResultResponse.success(oicdUtil.getUnsignedTokenClaims(idToken,"https://kauth.kakao.com", "edbf10bd8627e6eb676872109e996a9e")));
return null;
}


/* 6 ๊ฐœ๋ฐœ์ž์šฉ Access, RefreshToken ๋ฐœ๊ธ‰ */
@PostMapping("/developer-At")
public ResponseEntity<ResultResponse<?>> getAtRt(@RequestBody DeveloperAtRtRequest request) {
public ResponseEntity<ResultResponse<TokenDTO>> getAtRt(
@RequestBody DeveloperAtRtRequest request) {

return ResponseEntity.ok(
ResultResponse.success(memberService.giveDeveloperAccessToken(request)));
Expand All @@ -88,7 +87,7 @@ public ResponseEntity<ResultResponse<Void>> saveFcmToken(
/* 8. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ */

@PatchMapping("/default-image")
public ResponseEntity<ResultResponse<?>> updateDefaultImage(
public ResponseEntity<ResultResponse<String>> updateDefaultImage(
@ModelAttribute DefaultImageRequest request) {
return ResponseEntity.ok(
ResultResponse.success(memberService.updateDefaultImage(request).getPhoto()));
Expand All @@ -97,39 +96,39 @@ public ResponseEntity<ResultResponse<?>> updateDefaultImage(
/* 8. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์กฐํšŒ */

@GetMapping("/default-image")
public ResponseEntity<ResultResponse<?>> getDefaultImages() {
public ResponseEntity<ResultResponse<DefaultImagesResponse>> getDefaultImages() {
return ResponseEntity.ok(ResultResponse.success(memberService.getDefaultImages()));
}

/* 9. ํ˜„ ์œ ์ €์˜ ํšŒ์› ์ •๋ณด ์ฃผ๊ธฐ */
@GetMapping("/")
public ResponseEntity<ResultResponse<?>> rememberMe() {
public ResponseEntity<ResultResponse<MemberMeResponse>> rememberMe() {

return ResponseEntity.ok(
ResultResponse.success(memberService.rememberMe()));
}

/* 10. ๋ฉค๋ฒ„ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ • */
@PatchMapping("/photo")
public ResponseEntity<ResultResponse<?>> updateProfile(
public ResponseEntity<ResultResponse<MemberUpdateResponse>> updateProfile(
@ModelAttribute MemberUpdateRequest request) {
return ResponseEntity.ok(ResultResponse.success(memberService.updateProfile(request)));
}

@PostMapping("/start")
public ResponseEntity<ResultResponse<?>> certificatingUser(
public ResponseEntity<ResultResponse<QuizStartResponse>> certificatingUser(
@RequestBody QuizStartRequest request) {
return ResponseEntity.ok(ResultResponse.success(memberService.certificatingUser(request)));
}

@DeleteMapping("/")
public ResponseEntity<ResultResponse<?>> deleteMe() {
public ResponseEntity<ResultResponse<Void>> deleteMe() {
memberService.deleteMe();
return ResponseEntity.ok(ResultResponse.success(null));
}

@GetMapping("/{id}")
public ResponseEntity<ResultResponse<?>> select(
public ResponseEntity<ResultResponse<MemberSimpleDTO>> select(
@Parameter(name = "id", description = "๋ฉค๋ฒ„ PK ๊ฐ’", required = true, in = ParameterIn.PATH)
@PathVariable(value = "id") Long id
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.quiz.ourclass.domain.member.controller.docs;

import com.quiz.ourclass.domain.member.dto.TokenDTO;
import com.quiz.ourclass.domain.member.dto.request.DefaultImageRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberSignInRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberSignUpRequest;
import com.quiz.ourclass.domain.member.dto.request.MemberUpdateRequest;
import com.quiz.ourclass.domain.member.dto.request.UpdateFcmTokenRequest;
import com.quiz.ourclass.domain.member.dto.response.DefaultImagesResponse;
import com.quiz.ourclass.domain.member.dto.response.MemberMeResponse;
import com.quiz.ourclass.domain.member.dto.response.MemberUpdateResponse;
import com.quiz.ourclass.domain.quiz.dto.request.QuizStartRequest;
import com.quiz.ourclass.domain.quiz.dto.response.QuizStartResponse;
import com.quiz.ourclass.global.dto.MemberSimpleDTO;
import com.quiz.ourclass.global.dto.ResultResponse;
import io.swagger.v3.oas.annotations.Operation;
Expand Down Expand Up @@ -40,7 +44,7 @@ public interface MemberControllerDocs {
description = "OIDC ํ† ํฐ ์ธ์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.")
})
@PostMapping
ResponseEntity<ResultResponse<?>> signUp(MemberSignUpRequest request);
ResponseEntity<ResultResponse<TokenDTO>> signUp(MemberSignUpRequest request);


@Operation(summary = "๋กœ๊ทธ์ธ",
Expand All @@ -55,7 +59,7 @@ public interface MemberControllerDocs {
description = "OIDC ํ† ํฐ ์ธ์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.")
})
@PostMapping
ResponseEntity<ResultResponse<?>> signIn(MemberSignInRequest request);
ResponseEntity<ResultResponse<TokenDTO>> signIn(MemberSignInRequest request);

@Operation(summary = "FCM ํ† ํฐ ์ €์žฅ ๋ฐ ๊ฐฑ์‹ ",
description = "์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” FCM ํ† ํฐ์„ ์ €์žฅ ๋ฐ ๊ฐฑ์‹  ํ•ฉ๋‹ˆ๋‹ค.",
Expand All @@ -74,8 +78,17 @@ ResponseEntity<ResultResponse<Void>> saveFcmToken(
description = "๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์กฐํšŒ์— ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค."
)
})
@GetMapping("/default-image")
public ResponseEntity<ResultResponse<DefaultImagesResponse>> getDefaultImages();

@Operation(summary = "๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ •๋ณด ์ˆ˜์ •",
responses = {
@ApiResponse(responseCode = "200",
description = "๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ˆ˜์ •์— ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค."
)
})
@PatchMapping("/default-image")
public ResponseEntity<ResultResponse<?>> updateDefaultImage(
public ResponseEntity<ResultResponse<String>> updateDefaultImage(
@ModelAttribute DefaultImageRequest request);

@Operation(summary = "ํ˜„ ์œ ์ €์˜ ํšŒ์›์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ",
Expand All @@ -84,7 +97,7 @@ public ResponseEntity<ResultResponse<?>> updateDefaultImage(
description = "์œ ์ € ์ •๋ณด ํ™•์ธ์— ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.")
})
@GetMapping("/")
public ResponseEntity<ResultResponse<?>> rememberMe();
public ResponseEntity<ResultResponse<MemberMeResponse>> rememberMe();

@Operation(summary = "ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ˆ˜์ •",
responses = {
Expand All @@ -94,7 +107,8 @@ public ResponseEntity<ResultResponse<?>> updateDefaultImage(
)

@PatchMapping("/photo")
public ResponseEntity<ResultResponse<?>> updateProfile(MemberUpdateRequest request);
public ResponseEntity<ResultResponse<MemberUpdateResponse>> updateProfile(
MemberUpdateRequest request);

@Operation(summary = "๋ฉค๋ฒ„ ์กฐํšŒ", description = "ID ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฉค๋ฒ„ Simple ์ •๋ณด(id, name, iamgeUrl)๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.",
responses = {
Expand All @@ -104,14 +118,15 @@ public ResponseEntity<ResultResponse<?>> updateDefaultImage(
}
)
@GetMapping("{id}")
ResponseEntity<ResultResponse<?>> select(
ResponseEntity<ResultResponse<MemberSimpleDTO>> select(

@PathVariable(value = "id") Long id
);

@PostMapping("/start")
public ResponseEntity<ResultResponse<?>> certificatingUser(QuizStartRequest request);
public ResponseEntity<ResultResponse<QuizStartResponse>> certificatingUser(
QuizStartRequest request);

@DeleteMapping("/")
public ResponseEntity<ResultResponse<?>> deleteMe();
public ResponseEntity<ResultResponse<Void>> deleteMe();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.quiz.ourclass.domain.member.dto.request;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
import com.quiz.ourclass.domain.member.dto.OIDCDecodePayload;
import com.quiz.ourclass.domain.member.dto.OIDCPublicKeyDTO;
import com.quiz.ourclass.domain.member.dto.response.OIDCPublicKeysResponse;
import com.quiz.ourclass.domain.member.repository.MemberRepository;
import com.quiz.ourclass.domain.member.service.client.KakaoOicdClient;
import com.quiz.ourclass.domain.member.service.oidc.OidcUtilImpl;
import com.quiz.ourclass.global.exception.ErrorCode;
import com.quiz.ourclass.global.exception.GlobalException;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
Expand All @@ -31,20 +28,23 @@ public class OidcService {
private final KakaoOicdClient kakaoOicdClient;

/*
* 1. ์œ ํšจ์„ฑ ๊ฒ€์ฆ
* (1) ํ† ํฐ ๋””์ฝ”๋”ฉ -> (2) kid ๊ฐ’ ์•Œ์•„๋‚ด๊ธฐ -> (3) kid ์ด์šฉ, RSA key ์žฌ๋ฃŒ ์–ป์–ด๋‚ด๊ธฐ -> RSA๋ฅผ ํ†ตํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
* */
* 1. ์œ ํšจ์„ฑ ๊ฒ€์ฆ
* (1) ํ† ํฐ ๋””์ฝ”๋”ฉ -> (2) kid ๊ฐ’ ์•Œ์•„๋‚ด๊ธฐ -> (3) kid ์ด์šฉ, RSA key ์žฌ๋ฃŒ ์–ป์–ด๋‚ด๊ธฐ -> RSA๋ฅผ ํ†ตํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
* */

public OIDCDecodePayload certificatingIdToken (String idToken) {
public OIDCDecodePayload certificatingIdToken(String idToken) {

// ํ•ด๋‹น ํ† ํฐ์˜ ์„œ๋ช… ์ธ์ฆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ ํ‚ค์˜ id (kid) ํŠน์ •
String kid = oicdUtil.getKidFromUnsignedTokenHeader(idToken, iss, aud);
// ์นด์นด์˜ค ์ธ์ฆ ์„œ๋ฒ„์—์„œ ์ด๋ฒˆ ์ฃผ๊ธฐ์— ์‚ฌ์šฉํ•œ ๊ณต๊ฐœํ‚ค ๋ชฉ๋ก ์ „์ฒด ๋ฐ›์•„์˜ค๊ธฐ -> ์บ์‹œํ™” ํ•„์š”!!! ๋„ˆ๋ฌด ๋งŽ์ด ์š”์ฒญํ•˜๋ฉด ์ฐจ๋‹จ ๋‹นํ•จ!
OIDCPublicKeysResponse keys = kakaoOicdClient.getKakaoOIDCOpenKeys();
// ์ด๋ฒˆ ์ฃผ์— ์นด์นด์˜ค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณต๊ฐœํ‚ค ์ค‘์— ๋‚ด Resource Owner ์˜ id-token ์ธ์ฆ ๊ฐ€๋Šฅํ•œ key ๋ฐ›์•„์˜ค๊ธฐ
OIDCPublicKeyDTO nowKey = keys.getKeys().stream().filter(key -> key.getKid().equals(kid)).findFirst().orElseThrow(null);
OIDCPublicKeyDTO nowKey = keys.getKeys().stream().filter(key -> key.getKid().equals(kid))
.findFirst().orElseThrow(null);

if(nowKey == null) throw new GlobalException(ErrorCode.CERTIFICATION_FAILED);
if (nowKey == null) {
throw new GlobalException(ErrorCode.CERTIFICATION_FAILED);
}

// ํ•ด๋‹น ํ‚ค๋กœ ์„œ๋ช… ์ธ์ฆ, ์˜ˆ์™ธ ์•ˆ ํ„ฐ์ง€๊ณ  ์ธ์ฆ ๋˜๋ฉด Body ๊ฐ€์ ธ์˜ด
return oicdUtil.getOIDCTokenBody(idToken, nowKey.getN(), nowKey.getE());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.quiz.ourclass.domain.quiz.controller;

import com.quiz.ourclass.domain.quiz.controller.docs.QuizControllerDocs;
import com.quiz.ourclass.domain.quiz.dto.GamerDTO;
import com.quiz.ourclass.domain.quiz.dto.QuizGameDTO;
import com.quiz.ourclass.domain.quiz.dto.request.MakingQuizRequest;
import com.quiz.ourclass.domain.quiz.service.QuizServiceImpl;
import com.quiz.ourclass.global.dto.ResultResponse;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
Expand All @@ -23,24 +26,25 @@ public class QuizController implements QuizControllerDocs {
public final QuizServiceImpl quizService;

@PutMapping("")
public ResponseEntity<ResultResponse<?>> makingQuiz(@RequestBody MakingQuizRequest request) {
public ResponseEntity<ResultResponse<Void>> makingQuiz(@RequestBody MakingQuizRequest request) {
quizService.makingQuiz(request);
return ResponseEntity.ok(ResultResponse.success(null));
}

@GetMapping("/{orgId}")
public ResponseEntity<ResultResponse<?>> getQuizList(@PathVariable("orgId") long orgId) {
public ResponseEntity<ResultResponse<List<QuizGameDTO>>> getQuizList(
@PathVariable("orgId") long orgId) {
return ResponseEntity.ok(ResultResponse.success(quizService.getQuizList(orgId)));
}

@GetMapping("/code/{quizGameId}")
public ResponseEntity<ResultResponse<?>> getQuizUrl(
public ResponseEntity<ResultResponse<String>> getQuizUrl(
@PathVariable("quizGameId") long quizGameId) {
return ResponseEntity.ok(ResultResponse.success(quizService.getQuizUrl(quizGameId)));
}

@GetMapping("/ranking/{quizGameId}")
public ResponseEntity<ResultResponse<?>> getRanking(
public ResponseEntity<ResultResponse<List<GamerDTO>>> getRanking(
@PathVariable("quizGameId") long quizGameId) {
return ResponseEntity.ok(ResultResponse.success(quizService.getRanking(quizGameId)));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.quiz.ourclass.domain.quiz.controller.docs;

import com.quiz.ourclass.domain.quiz.dto.GamerDTO;
import com.quiz.ourclass.domain.quiz.dto.QuizGameDTO;
import com.quiz.ourclass.domain.quiz.dto.request.MakingQuizRequest;
import com.quiz.ourclass.global.dto.ResultResponse;
Expand All @@ -8,6 +9,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -27,7 +29,7 @@ public interface QuizControllerDocs {
""", content = @Content)
})
@PutMapping("")
public ResponseEntity<ResultResponse<?>> makingQuiz(@RequestBody MakingQuizRequest request);
public ResponseEntity<ResultResponse<Void>> makingQuiz(@RequestBody MakingQuizRequest request);


@Operation(summary = "ํ€ด์ฆˆ ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ",
Expand All @@ -38,7 +40,8 @@ public interface QuizControllerDocs {
content = @Content)
})
@GetMapping("/{orgId}")
public ResponseEntity<ResultResponse<?>> getQuizList(@PathVariable("orgId") long orgId);
public ResponseEntity<ResultResponse<List<QuizGameDTO>>> getQuizList(
@PathVariable("orgId") long orgId);

@Operation(summary = "ํ€ด์ฆˆ URL ์ƒ์„ฑ ๋ฐ ์ „์†ก",
responses = {
Expand All @@ -53,7 +56,7 @@ public interface QuizControllerDocs {
@ApiResponse(responseCode = "403", description = "(message : \"ํ•ด๋‹น ํ€ด์ฆˆ์˜ [URL]์„ ์ƒ์„ฑํ•  ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.\")")
})
@GetMapping("/code/{quizGameId}")
public ResponseEntity<ResultResponse<?>> getQuizUrl(
public ResponseEntity<ResultResponse<String>> getQuizUrl(
@PathVariable("quizGameId") long quizGameId);

@Operation(summary = "ํ€ด์ฆˆ ๊ฒŒ์ž„ ์‹ค์‹œ๊ฐ„ ๋žญํ‚น ๋ณด๊ธฐ",
Expand All @@ -62,6 +65,6 @@ public ResponseEntity<ResultResponse<?>> getQuizUrl(
content = @Content),
@ApiResponse(responseCode = "400", description = "(message : \"ํ•ด๋‹น ํ€ด์ฆˆ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.\")")
})
public ResponseEntity<ResultResponse<?>> getRanking(
public ResponseEntity<ResultResponse<List<GamerDTO>>> getRanking(
@PathVariable("quizGameId") long quizGameId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface QuizGameMapper {
@Transactional
Quiz toQuiz(QuizGame quizGame, QuizDTO quizDTO);

QuizGameDTO toQuizGameDTO(QuizGame QuizGame);
QuizGameDTO toQuizGameDTO(QuizGame quizGame);

FcmDTO toFcmDTO(String title, String body);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ public void receivedQuestion(QuestionRequest request) {
@KafkaListener(topics = ConstantUtil.QUIZ_ANSWER, containerFactory = "answerResponseContainerFactory")
public void receivedAnswer(AnswerResponse response) {
log.info("๋ณด๋‚ด์ค˜์•ผํ•  ๋‹ต ์ƒ์„ธ={}", response.toString());

if (response.submit().replaceAll(" ", "").equals(response.ans().replaceAll(" ", ""))) {
// replaceAll ์€ ํ•ญ์ƒ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ปดํŒŒ์ผํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
// replaceAll ์€ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋Œ€์ฒดํ•˜์ง€๋งŒ, replace๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด์„ ๋Œ€์ฒด
if (response.submit().replace(" ", "").equals(response.ans().replaceAll(" ", ""))) {

log.info(String.valueOf(
response.submit().replaceAll(" ", "").equals(response.ans().replaceAll(" ", ""))));
response.submit().replace(" ", "").equals(response.ans().replaceAll(" ", ""))));

int score =
redisUtil
Expand Down
Loading

0 comments on commit 3090b96

Please sign in to comment.