11 Commits

Author SHA1 Message Date
e4b185332b update
Some checks failed
Build And Test / build-and-push (push) Failing after 14m10s
2026-01-13 02:19:53 +09:00
b973522477 update 2026-01-13 02:19:30 +09:00
64032861e0 [update] header test
All checks were successful
Build And Test / build-and-push (push) Successful in 2m29s
2025-12-08 13:52:54 +09:00
ec866f2d05 update
All checks were successful
Build And Test / build-and-push (push) Successful in 2m54s
2025-12-05 16:16:32 +09:00
89c126b469 [update] Trace Endpoint-env
All checks were successful
Build And Test / build-and-push (push) Successful in 3m54s
2025-12-05 14:33:45 +09:00
118398fa68 [update] Trace Endpoint
All checks were successful
Build And Test / build-and-push (push) Successful in 2m52s
2025-12-05 12:40:05 +09:00
05f4ed5b2a modify endpoint
All checks were successful
Build And Test / build-and-push (push) Successful in 1m43s
2025-09-30 00:55:25 +09:00
ec39ba59be Update jaeger Endpoint
All checks were successful
Build And Test / build-and-push (push) Successful in 2m9s
2025-09-29 23:23:28 +09:00
cf8466aaf6 modify paylaod
All checks were successful
Build And Test / build-and-push (push) Successful in 1m44s
2025-09-29 00:25:24 +09:00
ef7837b276 Change base image
All checks were successful
Build And Test / build-and-push (push) Successful in 1m54s
2025-09-28 21:00:33 +09:00
4e02b68d8a Change base image 2025-09-28 21:00:03 +09:00
9 changed files with 97 additions and 8 deletions

4
.gitignore vendored
View File

@ -165,4 +165,6 @@ _media/cluster/
wheelhouse
# RS256 을 위한 적용 keys 폴더
keys
keys
msa-django-auth.code-workspace

View File

@ -1,5 +1,5 @@
# pull official base image
FROM python:3.10-slim-buster
FROM python:3.10-slim-bullseye
# set work directory
WORKDIR /usr/src/app

View File

@ -12,6 +12,20 @@ python3 manage.py runserver 0.0.0.0:8000
gunicorn auth_prj.wsgi:application --bind 0.0.0.0:8000 --workers 3
```
## 2025-12-05 TRACE ENDPOINT 변경 ( v0.0.15 )
* 변경전 static
* 변경후 변수 처리
* TRACE_ENDPOINT='test'
* TRACE_SERVICE_NAME=''
## 2025-09-29 jaeger Endpoint 변경 ( v0.0.14 )
* 변경전: endpoint="http://jaeger-collector.istio-system:4317",
* 변경후: endpoint="http://jaeger-collector.observability.svc.cluster.local:4317",
## 2025-09-28 RS256변경 적용 ( v0.0.13 )
* Docker Build base image 변경.
* python:3.10-slim-buster > python:3.10-slim-bullseye
## 2025-09-28 RS256변경 적용 ( v0.0.12 )
* 비대칭키 방식 → Private Key로 서명, Public Key로 검증.
* 토큰 발급 서버는 Private Key만 보관.

View File

@ -34,6 +34,9 @@ else:
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY', 'django-insecure-ec9me^z%x7-2vwee5#qq(kvn@^cs!!22_*f-im(320_k5-=0j5')
SERVICE_PLATFORM = os.getenv("SERVICE_PLATFORM", "none")
TRACE_SERVICE_NAME = os.getenv("TRACE_SERVICE_NAME", "msa-django-auth")
TRACE_ENDPOINT = os.getenv("TRACE_ENDPOINT", "none")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = int(os.environ.get('DEBUG', 1))

View File

@ -27,14 +27,22 @@ if not settings.DEBUG:
trace.set_tracer_provider(
TracerProvider(
resource=Resource.create({
"service.name": "msa-django-auth",
"service.platform": settings.SERVICE_PLATFORM,
# "service.name": "msa-django-auth",
"service.name": settings.TRACE_SERVICE_NAME,
})
)
)
otlp_exporter = OTLPSpanExporter(
endpoint="http://jaeger-collector.istio-system:4317",
# endpoint="http://jaeger-collector.istio-system:4317",
# endpoint="jaeger-collector.observability.svc.cluster.local:4317",
endpoint=settings.TRACE_ENDPOINT,
insecure=True,
headers={
"X-Scope-OrgID": settings.SERVICE_PLATFORM,
"X-Service": settings.TRACE_SERVICE_NAME
}
)
trace.get_tracer_provider().add_span_processor(

View File

@ -0,0 +1,38 @@
# Generated by Django 4.2.14 on 2026-01-12 16:16
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0006_customuser_encrypted_private_key_name'),
]
operations = [
migrations.AddField(
model_name='customuser',
name='address',
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='주소'),
),
migrations.AddField(
model_name='customuser',
name='birth_date',
field=models.DateField(blank=True, null=True, verbose_name='생년월일'),
),
migrations.AddField(
model_name='customuser',
name='education',
field=models.CharField(blank=True, choices=[('high_school', '고등학교 졸업'), ('associate', '전문학사'), ('bachelor', '학사'), ('master', '석사'), ('doctor', '박사'), ('other', '기타')], max_length=20, null=True, verbose_name='학력'),
),
migrations.AddField(
model_name='customuser',
name='gender',
field=models.CharField(blank=True, choices=[('M', '남성'), ('F', '여성'), ('O', '기타')], max_length=1, null=True, verbose_name='성별'),
),
migrations.AddField(
model_name='customuser',
name='phone',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='전화번호'),
),
]

View File

@ -35,11 +35,33 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
('user', '일반 사용자'),
)
GENDER_CHOICES = (
('M', '남성'),
('F', '여성'),
('O', '기타'),
)
EDUCATION_CHOICES = (
('high_school', '고등학교 졸업'),
('associate', '전문학사'),
('bachelor', '학사'),
('master', '석사'),
('doctor', '박사'),
('other', '기타'),
)
email = models.EmailField(unique=True)
name = models.CharField(max_length=255)
grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user')
desc = models.TextField(blank=True, null=True, verbose_name="설명")
desc = models.TextField(blank=True, null=True, verbose_name="설명")
# 추가 회원 정보 (선택)
phone = models.CharField(max_length=20, blank=True, null=True, verbose_name="전화번호")
address = models.CharField(max_length=500, blank=True, null=True, verbose_name="주소")
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, blank=True, null=True, verbose_name="성별")
birth_date = models.DateField(blank=True, null=True, verbose_name="생년월일")
education = models.CharField(max_length=20, choices=EDUCATION_CHOICES, blank=True, null=True, verbose_name="학력")
is_active = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)

View File

@ -8,7 +8,8 @@ class RegisterSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ("email", "name", "password", "grade", "desc")
fields = ("email", "name", "password", "grade", "desc",
"phone", "address", "gender", "birth_date", "education")
def create(self, validated_data):
password = validated_data.pop("password")
@ -27,6 +28,7 @@ class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
token["name"] = user.name
token["grade"] = user.grade
token["email"] = user.email # 선택적으로 추가 가능
token["sub"] = user.email # 선택적으로 추가 가능
# Kong JWT 플러그인용 issuer 정보 추가
token["iss"] = "msa-user"

View File

@ -1 +1 @@
v0.0.12
v0.0.17